Linux kuttkommando

Oppdatert: 05.04.2019 av Computer Hope

På Unix – som operativsystemer, fjerner kommandoen cut («kutter ut») deler av hver linje i en fil eller filer.

Dette dokumentet dekker GNU / Linux-versjonen av cut.

Syntaks

cut OPTION... ...

Alternativer

-b, –bytes = LISTE Velg bare byte fra hver linje som spesifisert i LISTE. LIST spesifiserer en byte, et sett med byte eller et byteområde; se Spesifisere LISTE nedenfor.
-c, –characters = LIST Velg bare tegnene fra hver linje som spesifisert i LISTE. LIST spesifiserer et tegn, et sett med tegn eller et tegnintervall; se Spesifisere LISTE nedenfor.
-d, –delimiter = DELIM bruk tegn DELIM i stedet for en fane for feltavgrenseren.
-f, –fields = LIST velg bare disse feltene på hver linje; skriv også ut en linje som ikke inneholder skilletegn, med mindre alternativet -s er spesifisert. LIST spesifiserer et felt, et sett med felt eller et feltområde; se Spesifisere LISTE nedenfor.
-n Dette alternativet ignoreres, men er inkludert av kompatibilitetsårsaker.
–komplement utfyller settet med valgte byte, tegn eller felt.
-s, – bare avgrenset ikke skriv ut linjer som ikke inneholder avgrensere.
–output-delimiter = STRING bruker STRING som utskillingsstreng. Standard er å bruke inngangsavgrenseren.
–hjelp Vis en hjelpemelding og avslutt.
–versjon informasjon om utgang og utgang.

Notater om bruk

Når du påkaller kutt, bruk alternativet -b, -c eller -f, men bare ett av dem.

Hvis ingen FIL er spesifisert, leser klipp fra standardinngangen.

Spesifisere LIST

Hver LIST består av et heltall, et område med heltall eller flere heltallsområder atskilt med komma. Valgt inngang skrives i samme rekkefølge som det leses, og skrives for å sendes ut nøyaktig en gang. Et område består av:

La oss for eksempel si at du har en fil som heter data.txt som inneholder følgende tekst:

onetwothreefourfivealphabetagammadeltaepsilon

I dette eksemplet er hvert av disse ordene atskilt med et tabulatortegn, ikke mellomrom. Tabulatortegnet er standardavgrenseren for kutt, så det vil som standard betrakte et felt som noe avgrenset av en fane.

For å «kutte» bare det tredje feltet på hver linje, bruk kommandoen:

cut -f 3 data.txt

… som vil sende følgende:

threegamma

Hvis du i stedet vil «klippe» bare det andre til det fjerde feltet på hver linje, bruk kommandoen:

cut -f 2-4 data.txt

… som vil sende følgende:

twothreefourbetagammadelta

Hvis du vil» klippe «bare den første gjennom- andre og fjerde til femte felt på hver linje (utelat det tredje feltet), bruk kommandoen:

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

… som vil sende følgende:

onetwofourfivealphabetadeltaepsilon

Eller la oss si deg vil ha det tredje feltet og hvert felt etter det, og utelate de to første feltene. I dette tilfellet kan du bruke kommandoen:

cut -f 3- data.txt

… som vil sende følgende:

threefourfivegammadeltaepsilon

Å spesifisere et område med LIST gjelder også for å klippe tegn (-c) eller byte (-b) fra en linje. Hvis du for eksempel bare skal sende ut tredje til tolvte tegn i hver linje med data.txt, bruker du kommandoen:

cut -c 3-12 data.txt

… som vil sendes ut følgende:

etwothrephabetag

Husk at «mellomrommet» mellom hvert ord faktisk er et enkelt fanetegn, så begge utgangslinjene viser ti tegn: åtte alfanumeriske tegn og to fanetegn. Med andre ord, cut utelater de to første tegnene på hver linje, og teller faner som ett tegn hver; skrive ut tegn tre til tolv, teller faner som ett tegn hver; og utelate tegn etter tolvte.

Å telle byte i stedet for tegn vil resultere i samme utdata i dette tilfellet, fordi i en ASCII-kodet tekstfil blir hvert tegn representert med en enkelt byte (åtte bits ) av data. Så kommandoen:

cut -b 3-12 data.txt

… vil, for vår fil data.txt, produsere nøyaktig samme utdata:

etwothrephabetag

Spesifisering av en skilletegn annet enn fane

Tabulatortegnet er standard skilletegn som kutt bruker for å bestemme hva som utgjør et felt. Så hvis filens felt allerede er avgrenset av faner, trenger du ikke spesifisere et annet skilletegn.

Du kan imidlertid spesifisere hvilket som helst tegn som skilletegn.For eksempel inneholder filen / etc / passwd informasjon om hver bruker i systemet, en bruker per linje, og hvert informasjonsfelt avgrenses av et kolon («:»). For eksempel kan linjen med / etc / passwd for rotbrukeren se slik ut:

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

Disse feltene inneholder følgende informasjon, i følgende rekkefølge, atskilt med et kolontegn:

  1. Brukernavn
  2. Passord (vist som x hvis kryptert)
  3. Bruker-ID-nummer (UID)
  4. Gruppe-ID-nummer (GID)
  5. Kommentarfelt (brukes av fingerkommandoen)
  6. Hjemmekatalog
  7. Skal

Brukernavnet er det første feltet på linjen, så bruk kommandoen for å vise hvert brukernavn på systemet:

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

… , for eksempel:

rootdaemonbinsyschope

(Det er mange flere brukerkontoer på et typisk system, inkludert mange kontoer som er spesifikke for systemtjenester, men for dette eksemplet vil vi late som det er bare fem brukere.)

Det tredje feltet på hver linje i / etc / passwd-filen er UID (bruker-ID-nummer), så bruk kommandoen for å vise hvert brukernavn og bruker-ID-nummer:

… som vil sende ut følgende, for eksempel:

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

Som du ser, vil utgangen være avgrenset, som standard, ved hjelp av samme skilletegn som er angitt for inngangen. I dette tilfellet, det er kolontegnet («:»). Du kan imidlertid spesifisere en annen skillelinje for inngang og utgang. Så hvis du ønsket å kjøre forrige kommando, men ha utdata avgrenset med mellomrom, du kan bruke kommandoen:

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

Men hva om du vil at utdataene skal avgrenses av en fane ? Å spesifisere et tabulatortegn på kommandolinjen er litt mer komplisert, fordi det er et tegn som ikke kan skrives ut. For å spesifisere det på kommandolinjen, må du «beskytte» det mot skallet. Dette gjøres annerledes avhengig av hvilket skall du har » bruker på nytt, men i Linux-standardskallet (bash) kan du spesifisere fanetegnet med $ «\ t». Så kommandoen:

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

… vil sende ut følgende, for eksempel:

root0daemon1bin2sys3chope1000

Eksempler

cut -c 3 file.txt

Skriv ut det tredje tegnet i hver linje i filfilen.txt, og utelat de andre.

cut -c 1-3 file.txt

Skriv ut de tre første tegnene i hver linje i filfilen.txt, og utelat resten.

cut -c -3 file.txt

Samme som kommandoen ovenfor. Skriv ut de tre første tegnene i hver linje med filen.txt.

cut -c 3- file.txt

Skriv ut de tredje til de siste tegnene på hver linje i filfilen.txt, uten å utelate de to første tegnene.

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

Skriv ut det første feltet i filen / etc / passwd, der felt avgrenses av et kolon («:»). Det første feltet i / etc / passwd er brukernavnet, så denne kommandoen sender ut hvert brukernavn i passwd-filen.

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

Skriv ut det første og sjette feltet, avgrenset av et kolon, av en hvilken som helst oppføring i / etc / passwd-filen som spesifiserer / bin / bash som påloggingsskall. Denne kommandoen sender ut brukernavnet og hjemmekatalogen til alle brukere hvis påloggingsskall er / bin / bash.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *