Linux klippkommando

Uppdaterad: 2015-05-05 av Computer Hope

På Unix -liknande operativsystem tar kommandot klipp bort (”skär ut”) sektioner av varje rad i en fil eller filer.

Detta dokument täcker GNU / Linux-versionen av klipp.

Syntax

cut OPTION... ...

Alternativ

-b, –bytes = LISTA Välj bara bytes från varje rad som anges i LIST. LIST specificerar en byte, en uppsättning byte eller ett intervall av byte; se Specificera LIST nedan.
-c, –characters = LIST Markera endast tecknen från varje rad som anges i LIST. LIST anger ett tecken, en uppsättning tecken eller ett teckenintervall; se Ange LIST nedan.
-d, –delimiter = DELIM använd tecken DELIM istället för en flik för fältavgränsaren.
-f, –fields = LIST markera endast dessa fält på varje rad; skriv också ut en rad som inte innehåller något avgränsningstecken, såvida inte alternativet -s anges. LIST anger ett fält, en uppsättning fält eller ett fältområde; se Specificera LISTA nedan.
-n Det här alternativet ignoreras men ingår av kompatibilitetsskäl.
–komplement kompletterar uppsättningen valda byte, tecken eller fält.
-s, – endast avgränsad skriver inte ut rader som inte innehåller avgränsare.
–output-avgränsare = STRING använder STRING som utmatningsavgränsningssträng. Standard är att använda inmatningsavgränsaren.
–hjälp Visa ett hjälpmeddelande och avsluta.
–version information om utdataversion och utgång.

Anvisningar om användning

När du åberopar klippning, använd alternativet -b, -c eller -f, men bara en av dem.

Om inget FIL är angivet läser klipp ut från standardingången.

Ange LIST

Varje LIST består av ett heltal, ett intervall av heltal eller flera heltalsområden åtskilda av kommatecken. Vald ingång skrivs i samma ordning som den läses och skrivs för att matas ut exakt en gång. Ett intervall består av:

Låt oss till exempel säga att du har en fil med namnet data.txt som innehåller följande text:

onetwothreefourfivealphabetagammadeltaepsilon

I det här exemplet är vart och ett av dessa ord åtskilda av ett tabbtecken, inte mellanslag. Tabbet är standardavgränsare för klippning, så det kommer som standard att betrakta ett fält som något som avgränsas av en flik.

För att ”klippa ut” bara det tredje fältet på varje rad, använd kommandot:

cut -f 3 data.txt

… vilket ger följande:

threegamma

Om du istället vill ”klippa” bara det andra till fjärde fältet på varje rad, använd kommandot:

cut -f 2-4 data.txt

… som skickar följande:

twothreefourbetagammadelta

Om du bara vill” klippa ”första andra och fjärde till femte fältet på varje rad (utelämna det tredje fältet), använd kommandot:

cut -f 1-2,4-5 data.txt

… som kommer att mata ut följande:

onetwofourfivealphabetadeltaepsilon

Eller låt oss säga dig vill ha det tredje fältet och varje fält efter det, utelämna de två första fälten. I det här fallet kan du använda kommandot:

cut -f 3- data.txt

… som skickar följande:

threefourfivegammadeltaepsilon

Att specificera ett intervall med LIST gäller också för att klippa tecken (-c) eller byte (-b) från en rad. För att till exempel bara mata ut tredje till tolvte tecknet i varje rad data.txt, använd kommandot:

cut -c 3-12 data.txt

… som kommer att matas ut följande:

etwothrephabetag

Kom ihåg att ”mellanslaget” mellan varje ord egentligen är en enda flik, så båda utmatningsraderna visar tio tecken: åtta alfanumeriska tecken och två tabbtecken. Med andra ord, klipp utelämnar de två första tecknen på varje rad, räknar flikarna som ett tecken vardera; mata ut tecken tre till tolv, räkna flikar som ett tecken vardera; och utelämna alla tecken efter tolfte.

Att räkna byte istället för tecken kommer att resultera i samma utdata i det här fallet, för i en ASCII-kodad textfil representeras varje tecken av en enda byte (åtta bitar ) av data. Så kommandot:

cut -b 3-12 data.txt

… kommer, för vår fildata.txt, att producera exakt samma utdata:

etwothrephabetag

Ange en avgränsare än fliken

Tabbet är standardavgränsaren som klipps av för att bestämma vad som utgör ett fält. Så om filens fält redan avgränsas av flikar behöver du inte ange ett annat avgränsningstecken.

Du kan dock ange vilket tecken som avgränsare.Exempelvis innehåller filen / etc / passwd information om varje användare i systemet, en användare per rad och varje informationsfält avgränsas av ett kolon (”:”). Till exempel kan raden med / etc / passwd för rootanvändaren se ut så här:

root:x:0:0:root:/root:/bin/bash

Dessa fält innehåller följande information, i följande ordning, åtskilda av ett kolon:

  1. Användarnamn
  2. Lösenord (visas som x om det är krypterat)
  3. Användar-ID-nummer (UID)
  4. Grupp-ID-nummer (GID)
  5. Kommentarfält (används av fingerkommandot)
  6. Startkatalog
  7. Skal

Användarnamnet är det första fältet på raden, så för att visa varje användarnamn i systemet, använd kommandot:

cut -f 1 -d ":" /etc/passwd

… som kommer att matas ut , till exempel:

rootdaemonbinsyschope

(Det finns många fler användarkonton i ett typiskt system, inklusive många konton som är specifika för systemtjänster, men för detta exempel ska vi låtsas det finns bara fem användare.)

Det tredje fältet på varje rad i / etc / passwd-filen är UID (användar-ID-nummer), så för att visa varje användarnamn och användar-ID-nummer, använd kommandot:

… som kommer att mata ut följande, till exempel:

root:0daemon:1bin:2sys:3chope:1000

Som du ser kommer utmatningen att avgränsas som standard med samma avgränsningstecken som anges för ingången. I det här fallet är det ”kolon-tecknet (”: ”). Du kan dock ange en annan avgränsare för in- och utdata. Så om du vill köra det tidigare kommandot men ha utmatningen avgränsad med ett mellanslag, du kan använda kommandot:

cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000

Men tänk om du vill att utdata ska avgränsas med en flik ? Att ange ett flikkaraktär på kommandoraden är lite mer komplicerat, eftersom det är ett tecken som inte kan skrivas ut. För att ange det på kommandoraden måste du ”skydda” det från skalet. Detta görs olika beroende på vilket skal du ” använder du igen, men i Linux-standardskalet (bash) kan du ange flikkaraktären med $ ”\ t”. Så kommandot:

cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd

… kommer att mata ut följande, till exempel:

root0daemon1bin2sys3chope1000

Exempel

cut -c 3 file.txt

Mata ut det tredje tecknet i varje rad i filfilen.txt, utelämna de andra.

cut -c 1-3 file.txt

Mata ut de första tre tecknen i varje rad i filfilen.txt, utelämna resten.

cut -c -3 file.txt

Samma som ovanstående kommando. Mata ut de tre första tecknen i varje rad i filen.txt.

cut -c 3- file.txt

Mata ut de tredje till de sista tecknen i varje rad i filfilen.txt, utelämna de två första tecknen.

cut -d ":" -f 1 /etc/passwd

Mata ut det första fältet i filen / etc / passwd, där fält avgränsas av ett kolon (”:”). Det första fältet i / etc / passwd är användarnamnet, så det här kommandot matar ut alla användarnamn i passwd-filen.

grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6

Mata ut det första och sjätte fälten, avgränsas av ett kolon, av vilken post som helst i filen / etc / passwd som anger / bin / bash som inloggningsskalet. Detta kommando matar ut användarnamnet och hemkatalogen för alla användare vars inloggningsskal är / bin / bash.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *