Linux cut-kommando
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:
- Brugernavn
- Adgangskode (vist som x hvis krypteret)
- Bruger-ID-nummer (UID)
- Gruppe-id-nummer (GID)
- Kommentarfelt (bruges af fingerkommandoen)
- Hjemmappe
- 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.