Iškirpkite Linux pavyzdžius. „Linux“ komandų mokymasis: iškirpti

Pavyzdžiuose naudosime šį failą:

$ cat test.txt cat komanda, skirta operacijoms, nukreiptoms į failą. cp komanda, skirta kopijuoti failus ar katalogus. ls komanda, kuri išvardija failus ir katalogus su jų atributais.

1. Stulpelių pasirinkimas pagal simbolį

Norėdami gauti konkrečius stulpelius, naudokite parinktį -c. Šiame pavyzdyje kiekvienoje eilutėje gausime 2-ąjį simbolį (2-ąjį stulpelį):

$ cut -c2 test.txt a p s

2. Stulpelių pasirinkimas pagal simbolius su reikšmių diapazonu

Simbolių diapazoną galima gauti nurodant pradžios ir pabaigos pozicijas simboliu „-“.

Šiame pavyzdyje paryškinsime nuo pirmo iki trečio kiekvienos eilutės simbolius:

$ cut -c1-3 test.txt cat cp ls

3. Stulpelių pasirinkimas naudojant pradžios arba pabaigos padėtį

Pradinė arba pabaigos padėtis gali būti nurodyta naudojant parinktį -c.

Šiame pavyzdyje prieš simbolį „-“ nurodome tik pradinį stulpelį, nuo kurio reikia pradėti pasirinkimą. Mes gausime visus simbolius nuo 3:

$ cut -c3- test.txt t komanda, skirta į failą orientuotoms operacijoms.

komanda kopijuoti failus ar katalogus.

komanda, kad išvardintų failus ir katalogus su atributais.

Toliau pateiktame pavyzdyje gausime tik pirmuosius 8 simbolius:

$ cut -c-8 test.txt cat comm cp kablelis ls kablelis

4. Nurodytų laukų pasirinkimas

Užuot nurodyę simbolių skaičių, galite pasirinkti visus laukus naudodami parinktis -d ir -f. Parinktis -f nurodo laukus, kuriuos reikia gauti, o parinktis -d nurodo skirtuką, kuriuo reikia atskirti laukus.

Šiame pavyzdyje rodysime tik pirmąjį /etc/passwd failo lauką, naudodami skirtuką „ : ” (dvitaškis):

$ cut -d":" -f1 /etc/passwd root demonas bin sys sinchronizuoti žaidimai bala

5. Įvairių laukų atranka

Taip pat galite pasirinkti kelis laukus. Toliau pateiktame pavyzdyje bus rodomi vartotojų, kurių apvalkalas nustatytas į /bin/bash, naudotojų vardai ir namų katalogai: $ grep "/bin/bash" /etc/passwd | cut -d":" -f1,6 root:/root bala:/home/bala Norėdami rodyti laukų diapazoną, nurodykite pradinį ir

paskutinis laukas

, kaip ir toliau pateiktame pavyzdyje. Žemiau pasirinksime laukus nuo 1 iki 4, 6 ir 7:

Mūsų pavyzdyje su /etc/passwd, jei nurodysite kitą skyriklį nei „:“, gausite visą eilutę.

Šiame pavyzdyje kaip skirtuką nurodome vamzdį (" | "), o iškirpimo priemonė parodys visą eilutę, net jei tokio skyriklio nerasta:

$ grep "/bin/bash" /etc/passwd | cut -d"|" -f1 root:x:0:0:root:/root:/bin/bash bala:x:1000:1000:bala,:/home/bala:/bin/bash

Tačiau naudojant parinktį -s galima išfiltruoti eilutes, kuriose yra tik skyriklis.

Šis pavyzdys nieko nerodys, nes -s išfiltruos eilutes, kuriose nėra " | ":

$ grep "/bin/bash" /etc/passwd | cut -d"|" -s -f1

7. Visų laukelių, išskyrus nurodytus, pasirinkimas

Norėdami naudoti pasirinkimą pagal kitus laukus nei nurodyti, naudokite parinktį --complement.

Šiame pavyzdyje pasirinksite visus laukus, išskyrus 7 lauką:

$ grep "/bin/bash" /etc/passwd | cut -d":" --complement -s -f7 root:x:0:0:root:/root bala:x:1000:1000:bala,:/home/bala

8. Skirtiklio keitimas rezultatų ekrane

Pagal numatytuosius nustatymus rezultatuose esantis skyriklis bus toks pat kaip ir pasirinkimo metu.

Norėdami pakeisti skyriklį, naudokite parinktį --output-delimiter.

Toliau pateiktame pavyzdyje skirtuką „:“ pakeisime „#“:

$ grep "/bin/bash" /etc/passwd | cut -d":" -s -f1,6,7 --output-delimiter="#" root#/root#/bin/bash bala#/home/bala#/bin/bash

9. Pakeiskite skyriklį naujos eilutės simboliu

Toliau pateiktame pavyzdyje kiekvienas iškirpimo išvesties laukas bus išspausdintas naujoje eilutėje. Taip pat naudojame parinktį --output-delimiter, bet suteikiame jai parametrą „n“:

$ grep bala /etc/passwd | cut -d":" -f1,6,7 --output-delimiter=$"n" bala /home/bala /bin/bash

10. Cut programos derinimas su kitomis Unix programomis

Visos iškirpimo programos galimybės gali būti atskleistos, kai ji naudojama su kitomis stdout apdorojimo programomis.

Toliau pateiktame pavyzdyje parodysime tik daugiausiai reikalinga informacija iš ps programos išvesties:

$ ps axu | grep python | sed "s/s+/ /g" | cut -d" " -f2,11- 2231 /usr/bin/python /usr/lib/unity-lens-video/unity-lens-video 2311 /usr/bin/python /usr/lib/unity-scope-video -remote/unity-scope-video-remote 2414 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon 2463 /usr/bin/python /usr/lib/system-service/system-service-d 3274 grep --color=auto python


Autorius: Rares Aioanei
Paskelbimo data: 2012 m. sausio 5 d
Vertimas: A. Krivoshey
Vertimo paskelbimo data: 2012 m. lapkričio 2 d

1. Įvadas

Jei manote, kad galite administruoti „Linux“ nenaudodami komandos „cut“, tada esate visiškai teisus. Tačiau šios labai paprastos komandinės eilutės įrankio įvaldymas suteiks tam tikrų pranašumų, nes leis dirbti efektyviau. Paprasčiau tariant, iškirpti yra viena iš daugelio teksto filtravimo paslaugų, kurias siūlo Linux operacinė sistema. Jis filtruoja STDIN iš kitos komandos arba iš failo ir siunčia filtruotą išvestį į STDOUT.

2. Dažnai naudojami variantai

Nesivaržydami pereikime tiesiai prie reikalo ir išnagrinėkime dažniausiai naudojamas komandų eilutės parinktis.

-b, --bytes=LIST
pasirinkite tik nurodytus baitus iš failo pagal sąrašą
-c, --characters=LIST
pasirinkti iš failo duotus simbolius pagal sąrašą
-f, --fields=LIST
pasirenka tik sąraše nurodytus laukus. Numatytasis skyriklis yra TAB. Numatytąją reikšmę galima nepaisyti naudojant parinktį -d.
-d, --delimiter=DELIMITER
Leidžia nustatyti lauko skyriklį. Kaip minėta pirmiau, numatytoji reikšmė yra TAB, tačiau ši parinktis leidžia ją nepaisyti.

3. Sąrašų naudojimas

Šiuo atveju sąrašą gali sudaryti vienas arba baitų, simbolių ar laukų rinkinys. Pavyzdžiui, norint išvesti tik antrąjį baitą, į sąrašą būtų įtraukta vienaskaita 2.
Štai kodėl:

2 – bus išvestas tik antras baitas, simbolis arba laukas, skaičiuojant nuo pirmojo.
2-5 – bus rodomi visi baitai, simboliai ir laukai nuo antrojo iki penkto.
-3 - bus išvesti visi baitai, simboliai ir laukai iki ketvirto.
5- - bus išvesti visi baitai, simboliai ar laukai, pradedant nuo penkto.
1,3,6 – bus išvesti tik pirmas, trečias ir šeštas baitai, simboliai arba laukai.
1,3- - bus rodomas pirmasis ir visi baitai, simboliai ar laukai, pradedant nuo trečiojo.

4. Atranka pagal simbolius

Žemiau pateikti pavyzdžiai kalba patys už save. Naudojome parinktį -c, norėdami išvesti tik nurodytą simbolių diapazoną iš failo cut.txt.

Echo cut-command > cut.txt $ cut -c 2 cut.txt u $ cut -c -3 cut.txt cut $ cut -c 2-5 cut.txt ut-c $ cut -c 5 - cut.txt komanda

5. Atranka baitais

Parinkties -b veikimo principas (baitas po baito) yra panašus į aprašytą aukščiau dirbant su simboliais. Žinome, kad vienas simbolis yra 1 baito dydžio, todėl komandos su parinktimi -b rezultatas bus toks pat.

$ cut -b 2 cut.txt u $ cut -b -3 cut.txt cut $ cut -b 2-5 cut.txt ut-c $ cut -b 5- cut.txt komanda

cut.txt yra paprastas ASCII tekstinis failas. Skirtumai bus pastebimi tik naudojant kelių baitų kodavimą, pvz., UTF-8 Unicode. Pavyzdžiui:

$ echo Lubos > cut.txt $ failas cut.txt cut.txt: UTF-8 Unicode tekstas $ cut -b 1-3 cut.txt Lu $ cut -c 1-3 cut.txt Lub

6. Pasirinkimas pagal laukus

Kaip minėta anksčiau, numatytasis iškirpimo komandos naudojamas laukas yra TAB. Pavyzdžiui, sukurkime failą, kuriame bendras skyriklis yra TAB.
Patarimas: jei nežinote, kaip komandinėje eilutėje įterpti TAB, prieš paspausdami TAB naudokite sparčiuosius klavišus CTRL + V.

$ echo "1 2 3" > cut.txt $ echo "4 5 6" >> cut.txt $ cat cut.txt 1 2 3 4 5 6 $ cut -f2- cut.txt 2 3 5 6

Aukščiau pateiktame pavyzdyje buvo išspausdintas tik antrasis ir trečiasis stulpeliai, nes TAB yra įprastas skyriklis, kurį taip pat naudoja komanda cut kaip numatytasis laukas. Galite įsitikinti, kad vietoj tarpo naudojote TAB, naudodami komandą od:

$ echo "1 2" > tab.txt $ echo "1 2" > space.txt $ od -a tab.txt 0000000 1 ht 2 nl 0000004 $ od -a space.txt 0000000 1 sp sp sp sp sp sp sp sp sp sp 2 nl 0000013

Jei reikia nepaisyti komandos elgsenos, kad būtų naudojamas kitas skyriklis, galima parinktis -d.

$ echo 1-2-3-4 > cut.txt $ echo 5-6-7-8 >> cut.txt $ cat cut.txt 1-2-3-4 5-6-7-8 $ cut -d - -f-2,4 cut.txt 1-2-4 5-6-8

Klasikinis pavyzdys yra, kai turime naudoti parinktį -d, kad iš /etc/passwd failo ištrauktume dabartinės sistemos vartotojų sąrašą.

$ cut -d: -f 1 /etc/passwd root demonas bin sys sinchronizavimo žaidimai man lp paštas naujienos uucp tarpinis serveris www-duomenys ...

Reikėtų pažymėti, kad norint gauti nuoseklų išvestį, bendras skyriklis turi būti nuoseklus kiekvienoje įvesties eilutėje. Pavyzdžiui, kitame pavyzdyje būtų sunku naudoti tarpą kaip bendrą skirtuką.

$ cat cut.txt cut komanda w komanda awk komanda wc komanda $ cut -d " " -f2 cut.txt komanda

Tokiu atveju būtų daug lengviau naudoti komandą awk arba sed, kad iš pradžių kelis tarpus pakeistumėte vienu skyrikliu, pvz., kableliu.

$ sed "s/\s\+/,/" cut.txt | cut -d , -f2 komandos komandos komanda komanda $ awk "( spausdinti $2; )" cut.txt komanda komandos komandų komanda

7. Duomenų neįtraukimas naudojant komplementą

Iškirpimo komanda leidžia pasirinktinai įtraukti norimus duomenis į išvestį. Jei reikia pasirinkti duomenis, kuriuos norite pašalinti iš išvesties, papildymo parinktis yra labai naudinga.
Pavyzdys:

$ echo 12345678 > cut.txt $ cat cut.txt 12345678 $ cut --papildyti -c -2,4,6- cut.txt 35

8. Pavyzdžiai

Komandų sintaksė Aprašymas

Iškirpimo komanda UNIX yra komanda, skirta iškirpti dalis iš kiekvienos failų eilutės ir įrašyti rezultatą į standartinę išvestį. Juo galima nupjauti linijos dalis baito padėtis, simbolis ir laukas. Iš esmės komanda iškirpti supjausto eilutę ir ištraukia tekstą. Būtina nurodyti parinktį su komanda, kitaip bus pateikta klaida. Jei pateikiamas daugiau nei vienas failo pavadinimas, duomenys iš kiekvieno failo neaplenkia pagal failo pavadinimą.

iškirpti OPTION....

Panagrinėkime du failus, turinčius pavadinimą state.txt ir Capital.txt yra atitinkamai 5 Indijos valstijų ir sostinių pavadinimai.

$ cat state.txt

Nenurodžius jokios parinkties rodoma klaida.

$ iškirpti status.txt cut: turite nurodyti baitų, simbolių arba laukų sąrašą Norėdami gauti daugiau informacijos, pabandykite "cut --help".

Parinktys ir ir Aprašymas su pavyzdžiais:

1. -b(baitas): Norėdami išgauti konkrečius baitus, turite sekti parinktį -b su baitų numerių sąrašu, atskirtu kableliais. Baitų diapazonas taip pat gali būti nurodytas naudojant brūkšnelį (-). Būtina nurodyti baitų numerių sąrašą, kitaip bus pateikta klaida. Tabukai ir naikinimo klavišai yra traktuojami kaip 1 baito simbolis.

Sąrašas be diapazonų $ cut -b 1,2,3 state.txt Ir Aru Ass Bih Chh Sąrašas su diapazonais $ cut -b 1-3,5-7 state.txt Andra Aruach Assm Bihr Chhtti

Ji naudoja specialią formą baitų pasirinkimui nuo eilutės pradžios iki pabaigos:

Čia 1- nurodo nuo 1-ojo baito iki eilutės pabaigos baito $ cut -b 1- state.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh Čia -3 nurodo nuo 1 baito iki 3 eilutės baito $ cut -b -3 state.txt Ir Aru Ass Bih Chh

2. -c (stulpelis): Norėdami iškirpti pagal simbolį, naudokite parinktį -c. Taip pasirenkami simboliai, duoti pasirinkčiai -c. Tai gali būti kableliais atskirtų skaičių sąrašas arba skaičių diapazonas, atskirtas brūkšneliu (-). Tabukai ir naikinimo klavišai yra traktuojami kaip personažas. Būtina nurodyti simbolių skaičių sąrašą, kitaip ši parinktis duos klaidą.

$cut -c [(k)-(n)/(k),(n)/(n)] failo pavadinimas

Čia kžymi pradinę veikėjo padėtį ir nžymi simbolio pabaigos vietą kiekvienoje eilutėje, jei k ir n yra atskirti „-“, kitaip jie yra tik padėtis simbolio kiekvienoje eilutėje iš failo, priimto kaip įvestis.

$ cut -c 2,5,7 state.txt nr rah sm ir hti

Viršuje esanti komanda iškirpti spausdina antrą, penktą ir septintą simbolį iš kiekvienos failo eilutės.

$ cut -c 1-7 state.txt Andhra Arunach Assam Bihar Chhatti

Viršuje esanti komanda iškirpti atspausdina pirmuosius septynis kiekvienos failo eilutės simbolius.

Iškirpti naudoja specialią formą simboliams pasirinkti nuo eilutės pradžios iki pabaigos:

$ cut -c 1- state.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh Viršuje esanti komanda spausdinama nuo pirmojo simbolio iki pabaigos. Čia komandoje nurodoma tik pradinė padėtis, o pabaigos padėtis praleidžiama. $ cut -c -5 state.txt Andhr Aruna Assam Bihar Chhat komanda aukščiau spausdina pradinę padėtį iki penkto simbolio. Čia pradinė padėtis praleidžiama ir nurodoma pabaigos padėtis.

3. -f (laukas): -c parinktis naudinga fiksuoto ilgio linijoms. Dauguma unix failų neturi fiksuoto ilgio eilučių. Norėdami išgauti naudingą informaciją, turite iškirpti pagal laukus, o ne pagal stulpelius. Nurodytų laukų numerių sąrašas turi būti atskirtas kableliais. Diapazonai nėra aprašyti naudojant -f parinktį. supjaustyti naudoja skirtuką kaip numatytąjį lauko skyriklį, bet taip pat gali veikti su kitu skyrikliu, naudojant -d variantas.
Pastaba: UNIX tarpas nelaikomas skyrikliu.

$cut -d "ribotuvas" -f (lauko numeris) failas.txt

Kaip faile state.txt laukai atskiriami tarpu, jei parinktis -d nenaudojama, tada spausdinama visa eilutė:

$ cut -f 1 state.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh

Jei naudojama parinktis -d, tarpas laikomas lauko skyrikliu arba skyrikliu:

$ cut -d " " -f 1 būsena.txt Andhra Arunachal Assam Bihar Chhattisgarh komanda spausdina lauką nuo pirmosios iki ketvirtosios kiekvienos failo eilutės. Komanda:$ cut -d " " -f 1-4 state.txt Išvestis: Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh

4. – papildyti: Kaip rodo pavadinimas, jis papildo produkciją. Ši parinktis gali būti naudojama kartu su kitomis parinktimis arba su -f arba su -c.

$ cut --complement -d " " -f 1 state.txt Pradešas Pradešas Assam Bihar Chhattisgarh $ cut --complement -c 5 state.txt Andha Pradešas Arunčal Pradešas Assa Biha Chhatisgarh

5. –išvesties skyriklis: Pagal numatytuosius nustatymus išvesties skyriklis yra toks pat kaip įvesties skyriklis, kurį nurodome iškirpdami -d variantas. Norėdami pakeisti išvesties skirtuką, naudokite parinktį -output-limiter = "ribotuvas".

$ cut -d " " -f 1,2 state.txt --output-delimiter="%" Andhra%Pradesh Arunachal%Pradesh Assam Bihar Chhattisgarh

Čia iškirpimo komanda pakeičia skirtuką (%) standartinėje išvestyje tarp laukų, kurie nurodomi naudojant -f parinktį.

6. – versija:Ši parinktis naudojama norint parodyti iškirpimo versiją, kuri šiuo metu veikia jūsų sistemoje.

$cut --versija cut (GNU coreutils) 8.26 Supakavo Cygwin (8.26-2) Autorių teisės (C) 2016 Free Software Foundation, Inc. Licencija GPLv3+: GNU GPL 3 arba naujesnė versija. Tai nemokama programinė įranga: galite ją keisti ir platinti. GARANTIJOS NĖRA, tiek, kiek leidžia įstatymai. Parašė Davidas M. Ihnatas, Davidas MacKenzie ir Jimas Meyeringas.

„Cut Command“ programos

1. Kaip naudoti uodegą su vamzdeliais (|): Iškirpimo komanda gali būti perduodama su daugeliu kitų unix komandų. Toliau pateiktame pavyzdyje išvestis katė komanda pateikiama kaip įvestis supjaustyti komandą su -f galimybė rūšiuoti būsenų pavadinimus iš failo status.txt atvirkštine tvarka.

$ cat state.txt | cut -d " " -f 1 | rūšiuoti -r Chhattisgarh Bihar Assam Arunachal Andhra

Jis taip pat gali būti sujungtas su vienu ar daugiau filtrų papildomam apdorojimui. Kaip ir šiame pavyzdyje, mes naudojame cat, head ir cut komandą, kurios išvestis saugoma failo pavadinime list.txt naudojant direktyvą (>).

$ cat state.txt | galva -n 3 | cut -d " " -f 1 > list.txt $ kačių sąrašas.txt Andhra Arunachal Assam

Ačiū Saloni Gupta kad pateiktumėte daugiau pavyzdžių.


Iškirpimo komanda leidžia pasirinkti norimą dalį iš kiekvienos failo eilutės (taikant tą pačią taisyklę visoms eilutėms) ir rodyti pasirinkimą ekrane.

Komanda turi tris pagrindines parinktis:

  • -b- kai pasirenkamas objektas yra baitai;
  • - Su- kai pasirenkamas objektas yra simboliai;
  • -f- kai pasirenkamas objektas yra teksto formatavimo elementai (stulpeliai, stulpeliai ir kt.).

Pradėkime nuo akivaizdžiausių - simbolių (parinktis -c)

Variantas -c

Pavyzdžiui, paimkime failą /etc/shells, jis atrodo taip: /bin/bash /bin/tcsh /bin/csh /bin/ash /bin/ksh /bin/zsh

Dabar naudokime komandą:

$ cut -c 1.5 /etc/shells // // // // // //

Šiame pavyzdyje parinktis -c reiškia, kad pasirinkimas bus simbolių, 1.5 reiškia, kad pasirenkame 1 ir 5 simbolius (skaičiuojant nuo 1), o viso kito failo turinio nepaisoma.

Simbolius galite pasirinkti ne pagal serijos numerius, o pagal diapazonus:

$ cut -c 1-5 /etc/shells /bin/ /bin/ /bin/ /bin/ /bin/ /bin/

Šiuo atveju pasirinkome simbolius nuo 1 iki 5 (imtinai).

Galite nurodyti kelis diapazonus, atskirtus kableliais:

~$ cut -c 1-5,8-9 /etc/shells /bin/sh /bin/sh /bin/h /bin/h /bin/h /bin/h

Pirmieji trys pavyzdžiai yra tik demonstravimo tikslais ir neturi praktinės reikšmės. Šis pavyzdys gali turėti tam tikrą prasmę:

$ cut -c 6- /etc/shells bash tcsh csh ash ksh zsh

Čia gavome sistemoje galimų apvalkalų sąrašą. Norėdami tai padaryti, nenurodėme tinkamos diapazono ribos, kuri verčia komandą išvesti visą eilučių turinį nuo nurodyto simbolio iki eilutės pabaigos. Kairėje pusėje galite palikti brūkšnį, tada pasirinkimas pereis nuo eilutės pradžios iki nurodyto simbolio.

Įdomu tai, kad visi šie pavyzdžiai ne visada veikia su rusiškais rašmenimis (bent jau UTF-8 koduotėje) - jie sukuria kažkokį keistą žingsnis po žingsnio spaudinį:

$ cut -c 1- rus.txt ytsukengshschzkh fyvaproldzheyo yachsmithby.yoyo

Tai visas rus.txt failo tekstas. Programa veikė teisingai.

$ cut -c 1-5 rus.txt yts?

oi?

jachta?

$ Ir čia viskas tapo keista. Juokinga, kad net kita komandų eilutės eilutė nusileido laiptais. Tačiau „tikrojoje“ konsolėje, iškviestoje paspaudus Ctrl+Alt+F2, tos pačios komandos išvestis atrodė daugiau ar mažiau tinkama:$ cut -c 1-5 rus.txt yts fy jach

Kaip paaiškėjo daugelio eksperimentų metu, kirilicos simboliai UTF-8 koduotėje susideda iš dviejų baitų, todėl reikia įvesti dvigubas skaitines reikšmes. Pavyzdžiui, jei ankstesnėje komandoje (arba bet kurioje kitoje) pakeisite 5 į 6

lyginis skaičius ), tada konsolės emuliatoriuje viskas bus taip, kaip turėtų:$ cut -c 1-6 rus.txt ytsu fyv jachos

Eksperimento grynumo dėlei paleidau Knoppix5.1, kuris pagal numatytuosius nustatymus turi koi-8 kodavimą, todėl nėra jokio skirtumo

Angliškas tekstas

nepastebėta - kiekviena raidė žymima vienu baitu:

$ cut -c 1-5 rus.txt yitsuke fywap yachsmi

Taigi jūs turite būti atsargūs su nacionalinėmis koduotėmis!

Tikiuosi, kad parinktis -c yra visiškai aiški, galite pereiti prie kitos.

Variantas -b Ji labai panaši į ankstesnę parinktį tiek baitų atrankos nurodymo metodu, tiek rezultatais, nes dažniausiai vienas baitas apibrėžia vieną simbolį.$ cut -b 1-6 /etc/shells /bin/b /bin/t /bin/c /bin/a /bin/k /bin/z

Mes pasirinkome pirmuosius 6 baitus iš kiekvienos failo /etc/shells eilutės.

Kaip ir naudojant -c parinktį, galite naudoti metodus

Qwer tyui op asdf ghjk llll zxcv bnm, ....

Ir štai tokia komanda:

$ cut -f 1,2 tab.txt qwer tyui asdf ghjk zxcv bnm,

Viskas kaip ir tikėtasi, parenkami pirmieji du stulpeliai. Kitas pavyzdys:

$ cut -f 2- tab.txt tyui op ghjk llll bnm, ....

Apskritai, aišku, schema ta pati, tik su stulpeliais. Klausimas kitas – kur gauti tokius failus, kurių stulpeliai atskirti skirtukais, kad būtų galima juos apdoroti?

Laimei, yra parinktis -d, kuri skirta veikti kartu su parinktimi -f ir supranta teksto skyriklius, išskyrus tabuliavimo simbolius. Katalogas /etc yra pilnas failų, kuriuose yra duomenų stulpeliai, atskirti įvairiais skyrikliais; Vienintelė problema ta, kad jie gana ilgi pavyzdžiams. Paimsiu pirmąsias dešimt eilučių iš /etc/group failo ir sukursiu group10.txt failą.

$ cut -f 1- -d: group10.txt root::0:root bin::1:root,bin,demono demonas::2:root,bin,daemon sys::3:root,bin,adm adm: :4:root,adm,daemon tty::5: diskas:!:6:root,adm,haldaemon,ya,alex lp::7:lp,ya,alex mem::8: kmem::9:

Šiame pavyzdyje parinktis -f nurodo jai pasirinkti visus stulpelius nuo pirmo iki paskutinio, o parinktis -d nurodo simbolį, kuris yra -d skyriklis: skyriklis yra dvitaškis. Viršuje ekrane yra visas group10.txt failas.

$ cut -f 1,3 -d: group10.txt root:0 bin:1 demonas:2 sys:3 adm:4 tty:5 diskas:6 lp:7 atmintis:8 kmem:9

O dabar pasirinkome pirmą ir trečią stulpelius, tai yra, išsiaiškinome kiekvienos grupės identifikavimo numerį. Kitu atveju objekto pasirinkimo taisyklės yra tokios pačios kaip ir kitų parinkčių. Žinoma, stulpelių skyrikliai gali būti ir kiti simboliai, o ne dvitaškis. Jie turi būti nurodyti naudojant parinktį -d<символ>. Taip pat yra vaizdesnis būdas naudoti parinktį -d. Vietoj ką tik aprašytos konstrukcijos (-d<символ>) parašykite --delim=<символ>, tai atrodo patikimiau nei naudojant tarpą.

Liko dvi parinktys: -s ir -n

Parinktis -s naudojama kartu su parinktimi -f ir nurodo jai nerodyti eilučių, kuriose nėra skiriamųjų simbolių. Net man aišku.

Likę neapibrėžtumai

Parinktis -n liko neatpažinta. Ji nurodo nieko nedaryti su kelių baitų simboliais, ypač jų neskaidyti. Nežinau, kas yra šie simboliai, kaip ir nežinau, ką komanda cut daro su jais pagal numatytuosius nustatymus. Yra dar viena paslaptis. Kaip nurodyti skyriklį, jei tai tarpas? Ar dvi ar trys vietos? Visi mano eksperimentai baigėsi niekais. Gal kas zino? Parašykite man, mano adresas yra straipsnio pradžioje.

Dėmesio: Parinktys -c, -b ir -f gali būti naudojamos tik atskirai.

Parinktys --help ir --version yra gerai žinomos, todėl apie jas nekalbėsiu.

Pjovimo programos santrauka

Programa pritaikoma ir efektyviai veikia su įprastais failais, tai yra su failais, kuriuose iš eilutės į eilutę kartojasi tam tikra informacijos struktūra (visi sąrašai, kontroliniai sąrašai, spaudiniai ir pan.). Sunku įsivaizduoti, kaip jį galima naudoti su įprastu tekstu, kuris nėra suskaidytas į eilutes. Turėdami tris pavyzdžio apibrėžimo būdus (baitus, simbolius ir stulpelius), galite pasiekti sėkmės beveik bet kuriuo atveju ne vienu, o kitu būdu. Komanda gali būti ypač naudinga kaip filtras kaip programos vamzdžių dalis.

Atnaujinta: 2017-10-17 pateikė Kompiuterio viltis

Apie pjūvį

iškirpti sintaksę

supjaustyti OPTION... [FAILAS]...

Parinktys

-b, --baitai=SĄRAŠAS Pasirinkite tik baitus SĄRAŠAS. SĄRAŠAS nurodo baitą, baitų rinkinį arba baitų diapazoną; žr. žemiau.
-c, --simboliai=SĄRAŠAS Pasirinkite tik simbolius iš kiekvienos eilutės, kaip nurodyta SĄRAŠAS. SĄRAŠAS nurodo simbolį, simbolių rinkinį arba simbolių diapazoną; žr. žemiau.
-d, --ribotuvas=DELIM naudoti simbolį DELIM vietoj lauko skyriklio skirtuko .
-f, --laukai=SĄRAŠAS kiekvienoje eilutėje pasirinkite tik šiuos laukus; taip pat spausdinkite bet kurią eilutę, kurioje nėra skiriamojo simbolio, nebent -s parinktis nurodyta. SĄRAŠAS nurodo lauką, laukų rinkinį arba laukų diapazoną; žr. žemiau.
-n Ši parinktis nepaisoma, bet įtraukta dėl suderinamumo priežasčių.
--papildyti papildyti pasirinktų baitų, simbolių ar laukų rinkinį.
-s, --tik-ribotas nespausdinkite eilučių, kuriose nėra skiriamųjų ženklų.
--išvesties skyriklis=STRING naudoti STRING kaip išvesties skyriklio eilutę . Pagal numatytuosius nustatymus naudojamas įvesties skyriklis.
--padėkite Parodykite pagalbos pranešimą ir išeikite.
-- versija išvesti informaciją apie versiją ir išeiti.

Naudojimo pastabos

Kviečiant supjaustyti, naudokite -b, -c, arba -f variantas, bet tik vienas iš jų.

Jei ne FAILAS yra nurodyta, supjaustyti nuskaito iš standartinės įvesties .

Nurodant SĄRAŠAS

Kiekvienas SĄRAŠAS yra sudarytas iš sveikojo skaičiaus, sveikųjų skaičių diapazono arba kelių sveikųjų skaičių diapazonų, atskirtų kableliais. Pasirinkta įvestis įrašoma ta pačia tvarka, kokia ji skaitoma, ir įrašoma taip, kad būtų išvestas tiksliai vieną kartą. Asortimentą sudaro:

N į N baitas, simbolis arba laukas, skaičiuojamas nuo 1 .
N - N baitas, simbolis arba laukas, iki eilutės pabaigos.
N- M N th į M baitas, simbolis arba laukas (imtinai).
- M nuo pirmos iki M baitas, simbolis arba laukas.

Pavyzdžiui, tarkime, kad turite failą pavadinimu data.txt kuriame yra toks tekstas:

Vienas du trys keturi penki alfa beta gama delta epsilonai

Šiame pavyzdyje kiekvienas iš šių žodžių yra atskirtas tabuliavimo simboliu, o ne tarpais. Skirtuko simbolis yra numatytasis skyriklis supjaustyti, todėl pagal numatytuosius nustatymus laukas bus ribojamas tabuliavimo ženklu.

Norėdami „iškirpti“ tik trečią kiekvienos eilutės lauką, naudokite komandą:

Iškirpti -f 3 data.txt

Trys gama

Jei vietoj to norite „iškirpti“ tik nuo antro iki ketvirto kiekvienos eilutės lauką, naudokite komandą:

Iškirpti -f 2-4 data.txt

Kuris išves šiuos duomenis:

Du trys keturi beta gama delta

Jei norite „iškirpti“ tik kiekvienos eilutės lauką nuo pirmos iki antros ir nuo ketvirtos iki penktos (praleidžiant trečią lauką), naudokite komandą:

Iškirpti -f 1-2,4-5 data.txt

Kuris išves šiuos duomenis:

Vienas du keturi penki alfa beta delta epsilonai

Arba, tarkime, norite trečiojo lauko ir kiekvieno lauko po jo, praleisdami pirmuosius du laukus. Tokiu atveju galite naudoti komandą:

Iškirpti -f 3- data.txt

Kuris išves šiuos duomenis:

Trys keturi penki gama delta epsilonai

Nurodykite diapazoną su SĄRAŠAS taip pat taikoma supjaustyti tingintys simboliai ( -c) arba baitai ( -b) iš eilutės. Pavyzdžiui, išvesti tik nuo trečios iki dvyliktos kiekvienos eilutės simbolio data.txt, naudokite komandą:

Iškirpti -c 3-12 data.txt

Kuris išves šiuos duomenis:

E du trys pha beta g

Atminkite, kad tarpas tarp kiekvieno žodžio iš tikrųjų yra vienas skirtuko simbolis, todėl abiejose išvesties eilutėse rodoma dešimt simbolių: aštuoni raidiniai ir skaitiniai simboliai ir du tabuliavimo simboliai. Kitaip tariant, supjaustyti praleidžia pirmuosius du kiekvienos eilutės simbolius, skaičiuojant skirtukus po vieną simbolį; išvesti simbolius nuo trijų iki dvylikos, skaičiuojant skirtukus po vieną simbolį; ir praleidžiant bet kokius simbolius po dvyliktos.

Skaičiuojant baitus, o ne simbolius, tokiu atveju bus gauta ta pati išvestis, nes ASCII koduotajame tekstiniame faile kiekvienas simbolis yra vaizduojamas vienu duomenų baitu (aštuoniu bitu). Taigi komanda:

Iškirpti -b 3-12 data.txt

Will, mūsų bylai data.txt, gamina lygiai tokią pačią išvestį:

E du trys pha beta g

Skirtiklio, išskyrus skirtuką, nurodymas

Skirtuko simbolis yra numatytasis skyriklis supjaustyti naudoja, kad nustatytų, kas yra laukas. Taigi, jei failo laukai jau atskirti skirtukais, jums nereikia nurodyti kito skiriamojo simbolio.

Tačiau kaip skirtuką galite nurodyti bet kurį simbolį. Pavyzdžiui, failas /etc/passwd yra informacijos apie kiekvieną vartotoją sistema, po vieną vartotoją eilutėje ir kiekvienas informacijos laukas yra atskirtas dvitaškiu (" : "). Pavyzdžiui, eilutė /etc/passwdšaknis vartotojas gali atrodyti taip:

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

Šiuose laukuose pateikiama ši informacija tokia tvarka, atskirta dvitaškiu:

  1. Vartotojo vardas
  2. Slaptažodis (rodomas kaip x jei užšifruota)
  3. Vartotojo ID numeris (UID)
  4. Grupės ID numeris (GID)
  5. Komentarų laukas (naudojamas piršto komanda)

Vartotojo vardas yra pirmasis eilutės laukas, todėl norėdami sistemoje rodyti kiekvieną vartotojo vardą, naudokite komandą:

Iškirpti -f 1 -d ":" /etc/passwd

Kuris išves, pavyzdžiui:

Šakninis demonas bin sys chope

(Įprastoje sistemoje yra daug daugiau vartotojų paskyrų, įskaitant daug paskyrų, būdingų sistemos paslaugoms, tačiau šiame pavyzdyje apsimesime, kad yra tik penki vartotojai.)

Trečiasis kiekvienos eilutės laukas /etc/passwd failas yra UID (vartotojo ID numeris), todėl norėdami parodyti kiekvieną vartotojo vardą ir vartotojo ID numerį, naudokite komandą:

Iškirpti -f 1,3 -d ":" /etc/passwd

Kuris išves, pavyzdžiui:

Šaknis:0 demonas:1 bin:2 sys:3 chope:1000

Kaip matote, išvestis bus atskirta pagal numatytuosius nustatymus, naudojant tą patį skiriamąjį simbolį, nurodytą įvestiei. Šiuo atveju tai yra dvitaškis (" : "). Tačiau galite nurodyti skirtingą įvesties ir išvesties skirtuką. Taigi, jei norėjote paleisti ankstesnę komandą, bet išvestis buvo atskirta tarpu, galite naudoti komandą:

Iškirpti -f 1,3 -d ":" --output-delimiter=" " /etc/passwd root 0 demonas 1 bin 2 sys 3 Chope 1000

Bet ką daryti, jei norite, kad išvestis būtų atskirta skirtukais? Komandinėje eilutėje nurodyti skirtuko simbolį yra šiek tiek sudėtingiau, nes tai yra nespausdinamas simbolis. Norėdami jį nurodyti komandinėje eilutėje, turite jį „apsaugoti“ nuo apvalkalo. Tai daroma skirtingai, priklausomai nuo to, kurį apvalkalą naudojate, tačiau numatytame Linux apvalkale (bash) galite nurodyti skirtuko simbolį naudodami $"\t". Taigi komanda:

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

Išveda, pavyzdžiui:

Root 0 demonas 1 bin 2 sys 3 Chope 1000

supjaustyti pavyzdžiai

cut -c 3 failas.txt

Išveskite trečiąjį kiekvienos failo eilutės simbolį failas.txt praleidžiant kitus.

Iškirpti -c 1-3 failas.txt

Išveskite pirmuosius tris kiekvienos failo eilutės simbolius failas.txt praleidžiant likusią dalį.

Iškirpti -c -3 failą.txt

Tas pats, kas aukščiau pateikta komanda. Išveskite pirmuosius tris kiekvienos eilutės simbolius failas.txt.

Iškirpti -c 3- file.txt

Išveskite nuo trečiojo iki paskutinių kiekvienos failo eilutės simbolių failas.txt praleidžiant pirmuosius du simbolius.

Iškirpti -d ":" -f 1 /etc/passwd

Išveskite pirmąjį failo lauką /etc/passwd, kur laukai yra atskirti dvitaškiu (" : “). Pirmasis laukas /etc/passwd yra vartotojo vardas , todėl ši komanda išves kiekvieną vartotojo vardą passwd failą.

Grep "/bin/bash" /etc/passwd | cut -d ":" -f 1.6

Išveskite pirmąjį ir šeštąjį bet kurio įrašo laukus, atskirtus dvitaškiu /etc/passwd failą, kuris nurodo /bin/bash kaip prisijungimo apvalkalas. Ši komanda išves bet kurio vartotojo, kurio prisijungimo apvalkalas yra, vartotojo vardą ir namų katalogą /bin/bash.

Susijusios komandos

grep– Filtruoti tekstą, atitinkantį reguliarųjį posakį.
pasta— Sujungti atitinkamas failų eilutes.



Ar jums patiko straipsnis? Pasidalinkite su draugais!