Linux cut-kommando

Opdateret: 05/04/2019 af Computer Hope

On Unix -lignende operativsystemer fjerner kommandoen cut (“skærer ud”) sektioner af hver linje i en fil eller filer.

Dette dokument dækker GNU / Linux-versionen af cut.

Syntaks

cut OPTION... ...

Indstillinger

-b, –bytes = LIST Vælg kun bytes fra hver linje som angivet i LIST. LIST angiver en byte, et sæt bytes eller et interval af bytes; se Specificering af LISTE nedenfor.
-c, –characters = LIST Vælg kun tegnene fra hver linje som angivet i LIST. LIST angiver et tegn, et sæt tegn eller et tegninterval; se Angivelse af LISTE nedenfor.
-d, –delimiter = DELIM brug tegn DELIM i stedet for en fane til feltafgrænseren.
-f, –fields = LIST vælg kun disse felter på hver linje; udskriv også en linje, der ikke indeholder noget skilletegn, medmindre indstillingen -s er angivet. LIST angiver et felt, et sæt felter eller et feltområde; se Specificering af LISTE nedenfor.
-n Denne mulighed ignoreres, men er inkluderet af kompatibilitetsårsager.
–komplement supplerer sæt af valgte bytes, tegn eller felter.
-s, – kun-afgrænset udskriv ikke linjer, der ikke indeholder afgrænsere.
–output-delimiter = STRING brug STRING som outputafgrænsningsstreng. Standard er at bruge inputafgrænseren.
–hjælp Vis en hjælpemeddelelse og afslut.
–version information om outputversion og afslutning.

Noter om brug

Når du påberåber klipning, skal du bruge indstillingen -b, -c eller -f, men kun en af dem.

Hvis der ikke er angivet FIL, læses klip fra standardindgangen.

Angivelse af LIST

Hver LIST består af et heltal, et interval af heltal eller flere heltalsområder adskilt af kommaer. Valgt input skrives i samme rækkefølge som det læses, og skrives til output nøjagtigt en gang. Et område består af:

Lad os for eksempel sige, at du har en fil med navnet data.txt, der indeholder følgende tekst:

onetwothreefourfivealphabetagammadeltaepsilon

I dette eksempel er hvert af disse ord adskilt af et tabulatortegn, ikke mellemrum. Fanetegnet er standardafgrænsningen for klip, så det vil som standard betragte et felt som noget, der er afgrænset af en fane.

For kun at “klippe” det tredje felt på hver linje skal du bruge kommandoen:

cut -f 3 data.txt

… som vil sende følgende:

threegamma

Hvis du i stedet kun vil “klippe” andet til fjerde felt på hver linje, skal du bruge kommandoen:

cut -f 2-4 data.txt

… som sender følgende:

twothreefourbetagammadelta

Hvis du kun vil” klippe “den første gennem- andet og fjerde til femte felt på hver linje (udelad det tredje felt), brug kommandoen:

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

… som vil udsende følgende:

onetwofourfivealphabetadeltaepsilon

Eller lad os sige dig vil have det tredje felt og hvert felt efter det, hvor de to første felter udelades. I dette tilfælde kan du bruge kommandoen:

cut -f 3- data.txt

… som sender følgende:

threefourfivegammadeltaepsilon

Angivelse af et interval med LIST gælder også for klipning af tegn (-c) eller bytes (-b) fra en linje. Hvis du f.eks. Kun skal udskrive det tredje til tolvte tegn i hver linje data.txt, skal du bruge kommandoen:

cut -c 3-12 data.txt

… som vil output følgende:

etwothrephabetag

Husk at “mellemrummet” mellem hvert ord faktisk er et enkelt fanetegn, så begge outputlinjer viser ti tegn: otte alfanumeriske tegn og to tabulatortegn. Med andre ord er cut udeladelse af de to første tegn i hver linje og tæller faner som et tegn hver; udsender tegn tre til tolv, tæller faner som et tegn hver; og udeladelse af tegn efter tolvte.

At tælle byte i stedet for tegn vil resultere i den samme output i dette tilfælde, fordi i en ASCII-kodet tekstfil repræsenteres hvert tegn med en enkelt byte (otte bits ) af data. Så kommandoen:

cut -b 3-12 data.txt

… vil for vores fildata.txt producere nøjagtigt den samme output:

etwothrephabetag

Angivelse af en anden afgrænser end fanen

Fanetegnet er standardadskilleren, som cut bruger til at bestemme, hvad der udgør et felt. Så hvis din fils felter allerede er afgrænset af faner, behøver du ikke angive et andet skilletegn.

Du kan dog angive et hvilket som helst tegn som afgrænser.For eksempel indeholder filen / etc / passwd oplysninger om hver bruger på systemet, en bruger pr. Linje, og hvert informationsfelt er afgrænset af et kolon (“:”). For eksempel kan linjen af / etc / passwd for rodbrugeren se sådan ud:

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

Disse felter indeholder følgende oplysninger i følgende rækkefølge, adskilt af et kolontegn:

  1. Brugernavn
  2. Adgangskode (vist som x hvis krypteret)
  3. Bruger-ID-nummer (UID)
  4. Gruppe-id-nummer (GID)
  5. Kommentarfelt (bruges af fingerkommandoen)
  6. Hjemmappe
  7. Shell

Brugernavnet er det første felt på linjen, så brug kommandoen for at få vist hvert brugernavn på systemet:

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

… som vil output , for eksempel:

rootdaemonbinsyschope

(Der er mange flere brugerkonti på et typisk system, herunder mange konti, der er specifikke for systemtjenester, men for dette eksempel vil vi foregive der er kun fem brugere.)

Det tredje felt på hver linje i filen / etc / passwd er UID (bruger-ID-nummer), så brug kommandoen for at få vist hvert brugernavn og bruger-ID-nummer:

… som f.eks. udsender følgende:

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

Som du kan se, bliver output afgrænset som standard ved hjælp af det samme afgrænsningstegn, der er angivet for input. I dette tilfælde er det kolontegnet (“:”). Du kan dog specificere en anden afgrænser for input og output. Så hvis du vil køre den forrige kommando, men har output afgrænset med et mellemrum, du kan bruge kommandoen:

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

Men hvad hvis du vil have, at output skal afgrænses af en fane ? At specificere et fanetegn på kommandolinjen er lidt mere kompliceret, fordi det er et tegn, der ikke kan udskrives. For at specificere det på kommandolinjen skal du “beskytte” det mod skallen. Dette gøres forskelligt afhængigt af hvilken skal du ” genbruger, men i Linux-standardskallen (bash) kan du angive fanetegnet med $ “\ t”. Så kommandoen:

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

… sender følgende ud, for eksempel:

root0daemon1bin2sys3chope1000

Eksempler

cut -c 3 file.txt

Udsend det tredje tegn i hver linje i filfilen.txt, undlad de andre.

cut -c 1-3 file.txt

Udsend de første tre tegn i hver linje i filfilen.txt, undlad resten.

cut -c -3 file.txt

Samme som ovenstående kommando. Output de første tre tegn i hver linje i file.txt.

cut -c 3- file.txt

Output de tredje til de sidste tegn i hver linje i filfilen.txt, udelad de to første tegn.

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

Udsend det første felt i filen / etc / passwd, hvor felter er afgrænset med et kolon (“:”). Det første felt i / etc / passwd er brugernavnet, så denne kommando udsender hvert brugernavn i passwd-filen.

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

Output det første og det sjette felt, afgrænset af et kolon, af enhver post i / etc / passwd-filen, der specificerer / bin / bash som login shell. Denne kommando sender brugernavnet og hjemmekataloget til enhver bruger, hvis login-shell er / bin / bash.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *