Linux-leikkauskomento
Unixissa -tyyppisten käyttöjärjestelmien kohdalla cut-komento poistaa (”leikkaa”) osan tiedostoista tai tiedostoista.
Tämä asiakirja kattaa cut-version GNU / Linux-version.
Syntaksi
cut OPTION... ...
Asetukset
-b, –bytes = LIST | Valitse vain tavut kustakin rivistä LIST-määrityksen mukaisesti. LIST määrittelee tavun, tavusarjan tai tavualueen; katso alla LISTIN määrittely. |
-c, –characters = LIST | Valitse vain merkit kustakin rivistä LIST-määrityksen mukaisesti. LIST määrittelee merkin, merkkisarjan tai merkkialueen; katso alla LISTIN määrittely. |
-d, –delimiter = DELIM | käytä DELIM-merkkiä kentän erottimen välilehden sijaan. |
-f, –fields = LIST | valitse vain nämä kentät kullekin riville; tulosta myös kaikki rivit, joissa ei ole erotinmerkkiä, ellei -s -vaihtoehtoa ole määritetty. LIST määrittelee kentän, joukon kenttiä tai kenttäalueen; katso alla LISTIN määrittely. |
-n | Tämä vaihtoehto ohitetaan, mutta se sisältyy yhteensopivuussyistä. |
– täydentää | täydentää valittujen tavujen, merkkien tai kenttien joukkoa. |
-s, –on-eroteltu | älä tulosta viivoja, jotka eivät sisällä erottimia. |
–output-delimiter = STRING | käytä STRING: tä lähtöerotinmerkkijonona. Oletuksena on käyttää syötteen erotinta. |
–help | Näytä ohjeviesti ja poistu. |
–version | tulosta versiotiedot ja poistu. |
Käyttöhuomautukset
Kun haet leikkausta, käytä -b, -c tai -f -vaihtoehtoa, mutta vain yhtä niistä.
Jos FILE-tiedostoa ei määritetä, cut-luku luetaan vakiotulosta.
LISTAN määrittely
Jokainen LIST koostuu kokonaisluvusta, kokonaislukualueesta tai useista pilkuilla erotetuista kokonaislukualueista. Valittu syöte kirjoitetaan samassa järjestyksessä kuin se luetaan, ja se kirjoitetaan tulostettavaksi täsmälleen kerran. Alue koostuu:
Oletetaan esimerkiksi, että sinulla on tiedosto nimeltä data.txt, joka sisältää seuraavan tekstin:
onetwothreefourfivealphabetagammadeltaepsilon
Tässä esimerkissä jokainen näistä sanoista erotetaan sarkainmerkillä, ei välilyönneillä. Sarkainmerkki on oletusarvoinen leikkauksen erotin, joten se pitää oletusarvoisesti kenttää millä tahansa välilehden rajoittamalla.
Jos haluat ”leikata” vain jokaisen rivin kolmannen kentän, käytä komentoa:
cut -f 3 data.txt
… joka tuottaa seuraavan:
threegamma
Jos haluat sen sijaan ”leikata” vain kunkin rivin toisesta neljänteen kentän, käytä komentoa:
cut -f 2-4 data.txt
… joka tuottaa seuraavan:
twothreefourbetagammadelta
Jos haluat” leikata ”vain ensimmäiset käytä jokaisen rivin toisen ja neljännen – viidennen kentän (jättämättä kolmannen kentän) komentoa:
cut -f 1-2,4-5 data.txt
… joka tuottaa seuraavan:
onetwofourfivealphabetadeltaepsilon
Tai sanotaan sinulle haluat kolmannen kentän ja jokaisen sen jälkeen olevan kentän, jättämättä kaksi ensimmäistä kenttää. Tässä tapauksessa voit käyttää komentoa:
cut -f 3- data.txt
… joka tuottaa seuraavan:
threefourfivegammadeltaepsilon
Alueen määrittäminen LIST: llä koskee myös merkkien (-c) tai tavujen (-b) leikkaamista riviltä. Jos esimerkiksi haluat lähettää vain datan.txt jokaisen rivin kolmannen – kahdestoista merkin, käytä komentoa:
cut -c 3-12 data.txt
… joka tuottaa seuraava:
etwothrephabetag
Muista, että jokaisen sanan välissä oleva ”välilyönti” on itse asiassa yksi sarkainmerkki, joten molemmissa tulostusriveissä on kymmenen merkkiä: kahdeksan aakkosnumeeriset merkit ja kaksi sarkainmerkkiä. Toisin sanoen leikkaus jättää pois jokaisen rivin kaksi ensimmäistä merkkiä laskemalla sarkaimet yhtenä merkkinä; tulostaa merkkejä kolmesta kaksitoista laskemalla välilehdet yhtenä merkkinä; ja jättämällä merkit pois kahdestoistaosan jälkeen.
Tavujen laskeminen merkkien sijaan johtaa tässä tapauksessa samaan tulokseen, koska ASCII-koodatussa tekstitiedostossa kutakin merkkiä edustaa yksi tavu (kahdeksan bittiä) ) tietoja. Joten komento:
cut -b 3-12 data.txt
… tuottaa tiedostolle data.txt täsmälleen saman tuloksen:
etwothrephabetag
Muun kuin välilehden erottimen määrittäminen
Sarkainmerkki on oletusarvoinen erotin, jota leikkaus käyttää määrittämään, mikä on kenttä. Joten jos tiedostosi kentät on jo rajattu välilehdillä, sinun ei tarvitse määrittää muuta erotinmerkkiä.
Voit kuitenkin määrittää minkä tahansa merkin erottimeksi.Esimerkiksi tiedosto / etc / passwd sisältää tietoja jokaisesta järjestelmän käyttäjästä, yhden käyttäjän riviä kohden, ja jokainen tietokenttä on erotettu kaksoispisteellä (”:”). Esimerkiksi pääkäyttäjän / etc / passwd-rivi voi näyttää tältä:
root:x:0:0:root:/root:/bin/bash
Nämä kentät sisältävät seuraavat tiedot seuraavassa järjestyksessä: erotettu kaksoispistemerkillä:
- käyttäjätunnus
- salasana (näkyy x, jos salattu)
- käyttäjätunnus (UID)
- Ryhmätunnus (GID)
- Kommenttikenttä (käytetään sormikomennolla)
- Kotihakemisto
- Kuori
Käyttäjänimi on rivin ensimmäinen kenttä, joten jos haluat näyttää jokaisen käyttäjänimen järjestelmässä, käytä komentoa:
cut -f 1 -d ":" /etc/passwd
… joka tuottaa esimerkiksi:
rootdaemonbinsyschope
(Tyypillisessä järjestelmässä on paljon enemmän käyttäjätilejä, mukaan lukien monet järjestelmipalveluille ominaiset tilit, mutta teemme tässä esimerkissä käyttäjiä on vain viisi.)
Jokaisen rivin / etc / passwd-tiedoston kolmas kenttä on UID (käyttäjätunnus), joten jos haluat näyttää kunkin käyttäjänimen ja käyttäjätunnuksen, käytä komentoa:
… joka tuottaa esimerkiksi seuraavat:
root:0daemon:1bin:2sys:3chope:1000
Kuten näette, tulos on erotettu oletusarvoisesti samalla syötteelle määritetyllä erotinmerkillä. Tässä tapauksessa tämä on kaksoispiste (”:”). Voit kuitenkin määrittää toiselle erotinmerkinnälle tulon ja lähdön. Joten jos haluat suorittaa edellisen komennon, mutta lähdön rajaa välilyönti, voit käyttää komentoa:
cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000
Mutta entä jos haluat, että tulos erotetaan välilehdellä ”Sarkainmerkin määrittäminen komentorivillä on hieman monimutkaisempi, koska se on tulostamaton merkki. Jos haluat määrittää sen komentoriville, sinun on” suojattava ”se kuorelta. Tämä tehdään eri tavalla riippuen siitä, minkä kuoren sinä” uudelleen, mutta Linuxin oletuskuoressa (bash) voit määrittää sarkainmerkin merkillä $ ”\ t”. Joten komento:
cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd
… tuottaa esimerkiksi seuraavan:
root0daemon1bin2sys3chope1000
Esimerkkejä
cut -c 3 file.txt
Tulosta tiedoston file.txt jokaisen rivin kolmas merkki jättämällä muut pois.
cut -c 1-3 file.txt
Tulosta tiedoston file.txt jokaisen rivin kolme ensimmäistä merkkiä, loput jättämättä.
cut -c -3 file.txt
Sama kuin yllä olevan komennon. Tulosta file.txt-tiedoston jokaisen rivin kolme ensimmäistä merkkiä.
cut -c 3- file.txt
Tulosta kolmas tiedosto file.txt-tiedoston jokaisen rivin viimeisten merkkien kautta jättämättä kaksi ensimmäistä merkkiä.
cut -d ":" -f 1 /etc/passwd
Tulosta tiedoston / etc / passwd ensimmäinen kenttä, jossa kentät on erotettu kaksoispisteellä (”:”). / Etc / passwd: n ensimmäinen kenttä on käyttäjänimi, joten tämä komento tuottaa kaikki passwd-tiedoston käyttäjätunnukset.
grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6
Anna ensimmäinen ja kuudes kenttä, kaksoispisteellä eroteltu kaikista tiedostoista / etc / passwd, jotka määrittelevät / bin / bash kirjautumiskuoreksi. Tämä komento antaa käyttäjänimen ja kotihakemiston jokaiselle käyttäjälle, jonka kirjautumissuojaus on / bin / bash.