Pritini shembuj linux. Mësimi i komandave Linux: prerë

Në shembujt ne do të përdorim skedarin e mëposhtëm:

$ cat test.txt komanda cat për operacionet e orientuara drejt skedarëve. Komanda cp për kopjimin e skedarëve ose drejtorive. Komanda ls për të listuar skedarët dhe drejtoritë me atributet e tyre.

1. Zgjedhja e kolonave sipas karakterit

Për të marrë kolona specifike, përdorni opsionin -c. Në shembullin e mëposhtëm do të marrim karakterin e dytë (kolona e dytë) në secilën rresht:

$ prerë -c2 test.txt a p s

2. Zgjedhja e kolonave sipas karaktereve me një varg vlerash

Një sërë karakteresh mund të merret duke specifikuar pozicionin e fillimit dhe të përfundimit me simbolin "-".

Në shembullin e mëposhtëm, ne do të theksojmë karakteret e parë deri në të tretën në secilën rresht:

$ prerë -c1-3 test.txt cat cp ls

3. Zgjedhja e kolonave duke përdorur pozicionin e fillimit ose të përfundimit

Pozicioni i fillimit ose i përfundimit mund të specifikohet duke përdorur opsionin -c.

Në shembullin e mëposhtëm, ne specifikojmë vetëm kolonën fillestare nga e cila do të fillojë përzgjedhja, përpara simbolit "-". Do t'i marrim të gjithë personazhet duke filluar nga data 3:

komanda $ cut -c3- test.txt t për operacionet e orientuara nga skedari. komandë për kopjimin e skedarëve ose drejtorive. komanda për të renditur skedarët dhe drejtoritë me atributet e saj.

Dhe në shembullin e mëposhtëm, do të marrim vetëm 8 karakteret e para:

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

4. Përzgjedhja e fushave të specifikuara

Në vend që të specifikoni numrin e karaktereve, mund të zgjidhni fusha të tëra duke përdorur opsionet -d dhe -f. Opsioni -f specifikon fushat që do të merren, dhe opsioni -d specifikon ndarësin me të cilin do të ndahen fushat.

Në shembullin e mëposhtëm, ne do të shfaqim vetëm fushën e parë të skedarit /etc/passwd, duke përdorur kufizuesin “ :” (colon):

$ cut -d":" -f1 /etc/passwd rrënjë daemon bin sys sinkronizimi i lojërave bala

5. Kampionimi i fushave të ndryshme

Ju gjithashtu mund të zgjidhni disa fusha. Shembulli më poshtë do të shfaqë emrat e përdoruesve dhe drejtoritë kryesore të përdoruesve, guaska e të cilëve është vendosur në /bin/bash:

$ grep "/bin/bash" /etc/passwd | prerë -d":" -f1,6 rrënjë:/rrënjë bala:/shtëpi/bala

Për të shfaqur një sërë fushash, specifikoni fillestarin dhe fusha e fundit, si në shembullin e mëposhtëm. Më poshtë do të zgjedhim fushat nga 1 deri në 4, 6 dhe 7:

$ grep "/bin/bash" /etc/passwd | cut -d":" -f1-4,6,7 rrënjë:x:0:0:/rrënjë:/bin/bash bala:x:1000:1000:/home/bala:/bin/bash

6. Zgjedhja e fushave nëse rreshti përmban një kufizues

Në shembullin tonë me /etc/passwd, nëse specifikoni një ndarës të ndryshëm nga ":", do të merrni të gjithë rreshtin.

Në shembullin e mëposhtëm, ne specifikojmë një tub (" | ") si ndarës, dhe mjeti i prerjes do të shfaqë të gjithë linjën, edhe nëse një përcaktues i tillë nuk gjendet:

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

Megjithatë, është e mundur të filtrohen linjat që përmbajnë vetëm ndarësin duke përdorur opsionin -s.

Shembulli i mëposhtëm nuk do të tregojë asgjë sepse -s do të filtrojë linjat që nuk përmbajnë " | ":

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

7. Zgjedhja e të gjitha fushave përveç atyre të specifikuara

Për të përdorur përzgjedhjen sipas fushave të tjera nga ato të specifikuara, përdorni opsionin --complement.

Në shembullin e mëposhtëm, ju do të zgjidhni të gjitha fushat përveç fushës 7:

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

8. Ndryshimi i ndarësit në ekranin e rezultateve

Si parazgjedhje, ndarësi në rezultate do të jetë i njëjtë me atë të përdorur gjatë përzgjedhjes.

Për të ndryshuar delimiterin, përdorni opsionin --output-delimiter.

Në shembullin e mëposhtëm, ne do të zëvendësojmë ndarësin " : " me " # ":

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

9. Zëvendësoni kufizuesin me karakterin e linjës së re

Shembulli i mëposhtëm do të printojë çdo fushë në daljen e prerë në një rresht të ri. Ne përdorim gjithashtu opsionin --output-delimiter, por i japim atij parametrin "n":

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

10. Kombinimi i programit Cut me programet e tjera të Unix

Të gjitha aftësitë e mjetit të prerë mund të shihen kur përdoren me pajisje të tjera për përpunimin e stdout.

Në shembullin e mëposhtëm do të shfaqim vetëm më informacionin e nevojshëm nga dalja e programit ps:

$ 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


Autor: Rares Aioanei
Data e publikimit: 5 janar 2012
Përkthimi: A. Krivoshey
Data e botimit të përkthimit: 2 nëntor 2012

1. Hyrje

Nëse mendoni se mund të administroni Linux pa përdorur komandën cut, atëherë keni absolutisht të drejtë. Megjithatë, zotërimi i këtij mjeti shumë të thjeshtë të linjës së komandës do t'ju japë disa avantazhe pasi do t'ju lejojë të bëheni më efikas në punën tuaj. E thënë thjesht, prerja është një nga mjetet e shumta të filtrimit të tekstit të ofruara nga sistemi operativ Linux. Ai filtron STDIN nga një komandë tjetër ose nga një skedar dhe dërgon daljen e filtruar në STDOUT.

2. Opsionet e përdorura shpesh

Pa shumë vonesë, le të shkojmë direkt në pikën dhe të eksplorojmë opsionet më të përdorura të linjës së komandës.

-b, --bytes=LIST
zgjidhni vetëm bajtet e specifikuara nga skedari sipas listës
-c, --karaktere=LIST
zgjidhni nga skedari personazhe të dhëna sipas listës
-f, --fusha=LIST
zgjedh vetëm fushat e listuara në listë. Kufizuesi i paracaktuar është TAB. Vlera e paracaktuar mund të anashkalohet duke përdorur opsionin -d.
-d, --delimiter=DELIMITER
Ju lejon të vendosni ndarësin e fushave. Siç u tha më lart, parazgjedhja është TAB, por ky opsion ju lejon ta anashkaloni atë.

3. Përdorimi i listave

Lista në këtë rast mund të përbëhet nga një ose një grup bajtësh, karakteresh ose fushash. Për shembull, për të nxjerrë vetëm bajtin e dytë, lista do të përfshijë njëjës 2.
Kjo është arsyeja pse:

2 - do të dalë vetëm bajt, karakteri ose fusha e dytë, duke llogaritur nga e para.
2-5 - do të shfaqen të gjitha bajtet, karakteret dhe fushat nga e dyta në të pestën.
-3 - do të dalin të gjitha bajtet, karakteret dhe fushat deri në të katërtën.
5- - do të dalin të gjitha bajtet, karakteret ose fushat, duke filluar nga e pesta.
1,3,6 - do të dalin vetëm bajtët, karakteret ose fushat e parë, të tretë dhe të gjashtë.
1,3- - do të shfaqen bajtet, karakteret ose fushat e para dhe të gjitha, duke filluar nga e treta.

4. Marrja e mostrave sipas karaktereve

Shembujt e mëposhtëm flasin vetë. Ne përdorëm opsionin -c për të nxjerrë vetëm gamën e specifikuar të karaktereve nga skedari 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 command

5. Marrja e mostrave sipas bajteve

Parimi i funksionimit të opsionit -b (byte pas byte) është i ngjashëm me atë të përshkruar më sipër për të punuar me karaktere. Ne e dimë se një karakter është 1 bajt në madhësi, kështu që rezultati i ekzekutimit të komandës me opsionin -b do të jetë i njëjtë.

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

cut.txt është një skedar teksti i thjeshtë ASCII. Dallimet do të jenë të dukshme vetëm kur përdorni kodime me shumë bajt si UTF-8 Unicode. Për shembull:

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

6. Përzgjedhja sipas fushave

Siç u përmend më herët, fusha e paracaktuar e përdorur nga komanda cut është TAB. Për shembull, le të krijojmë një skedar ku kufiri i përbashkët është TAB.
Këshillë: Nëse nuk dini si të futni TAB në vijën e komandës, përdorni shkurtoren e tastierës CTRL + V përpara se të shtypni TAB.

$ 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

Në shembullin e mësipërm, vetëm kolona e dytë dhe e tretë u printuan sepse TAB është një ndarës i zakonshëm dhe përdoret gjithashtu nga komanda cut si fushë e paracaktuar. Mund të siguroheni që keni përdorur TAB në vend të një hapësire duke përdorur komandën 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

Nëse duhet të anashkaloni sjelljen e komandës për të përdorur një ndarës tjetër, opsioni -d është i disponueshëm.

$ 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 prerë.txt 1-2-4 5-6-8

Një shembull klasik është ku duhet të përdorim opsionin -d për të nxjerrë listën e përdoruesve në sistemin aktual nga skedari /etc/passwd.

$ cut -d: -f 1 /etc/passwd root daemon bin sys sinkronizimi i lojërave man lp mail news uucp proxy www-data ...

Duhet të theksohet se për të marrë një rezultat të qëndrueshëm, kufiri i përbashkët duhet të jetë i qëndrueshëm në çdo linjë hyrëse. Për shembull, në shembullin e mëposhtëm, do të ishte e vështirë të përdoret hapësira si një kufizues i përbashkët.

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

Në këtë rast, do të ishte shumë më e lehtë për të përdorur komandën awk ose sed për të zëvendësuar fillimisht hapësirat e shumta me një kufizues të vetëm, siç është një presje.

$ sed "s/\s\+/,/" cut.txt | cut -d, -f2 komanda komanda komanda komanda $ awk "( print $2; )" komanda e komandës cut.txt komanda e komandës

7. Përjashtimi i të dhënave duke përdorur komplementin

Komanda e prerjes ju lejon të përfshini në mënyrë selektive të dhënat e dëshiruara në dalje. Në rast se ju duhet të zgjidhni të dhëna për t'i përjashtuar nga dalja, opsioni i plotësimit është shumë i dobishëm.
Shembull:

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

8. Shembuj

Sintaksa e komandës Përshkrim

Komanda e prerjes në UNIX është një komandë për prerjen e seksioneve nga çdo rresht skedarësh dhe shkrimin e rezultatit në dalje standarde. Mund të përdoret për të prerë pjesë të një linje nga pozicioni, karakteri dhe fusha e bajtit. Në thelb komanda cut pret një rresht dhe nxjerr tekstin. Është e nevojshme të specifikohet opsioni me komandë përndryshe jep gabim. Nëse jepen më shumë se një emër skedari, atëherë të dhënat nga secili skedar janë nuk paraprin me emrin e skedarit.

prerë OPTION......

Le të shqyrtojmë dy skedarë që kanë emër gjendje.txt dhe kapitale.txt përmban përkatësisht 5 emra të shteteve dhe kryeqyteteve indiane.

$ cat shtet.txt

Pa asnjë opsion të specifikuar ai shfaq gabim.

$ prerë gjendjen.txt prerje: duhet të specifikoni një listë bajtash, karakteresh ose fushash Provoni "cut --help" për më shumë informacion.

Opsione dhe ir Përshkrimi me shembuj:

1. -b(byte): Për të nxjerrë bajtet specifike, duhet të ndiqni opsionin -b me listën e numrave të bajtit të ndarë me presje. Gama e bajteve gjithashtu mund të specifikohet duke përdorur vizën (-). Është e nevojshme të specifikohet lista e numrave të bajtit përndryshe jep gabim. Skedat dhe hapësirat e pasme trajtohen si një karakter prej 1 bajt.

Lista pa vargje $ prerë -b 1,2,3 gjendje.txt Dhe Aru Ass Bih Chh Lista me vargjet $ prerë -b 1-3,5-7 gjendje.txt Andra Aruach Assm Bihr Chhtti

Ai përdor një formë të veçantë për zgjedhjen e bajteve nga fillimi deri në fund të rreshtit:

Në këtë, 1- tregoni nga bajt 1 në fund bajt të një rreshti $ prerë -b 1- gjendje.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh Në këtë, -3 tregojnë nga bajt 1 në 3 të një rreshti $prerje -b -3 gjendje.txt Dhe Aru Ass Bih Chh

2. -c (kolona): Për të prerë sipas karakterit përdorni opsionin -c. Kjo zgjedh karakteret e dhëna në opsionin -c. Kjo mund të jetë një listë numrash të ndara me presje ose një varg numrash të ndarë me vijë ndarëse (-). Skedat dhe hapësirat e pasme trajtohen si personazh. Është e nevojshme të specifikohet lista e numrave të karaktereve përndryshe jep gabim me këtë opsion.

$cut -c [(k)-(n)/(k),(n)/(n)] emri i skedarit

Këtu, k tregon pozicionin fillestar të personazhit dhe n tregon pozicionin përfundimtar të karakterit në çdo rresht, nëse k dhe n ndahen me “-” përndryshe janë vetëm pozicioni të karakterit në çdo rresht nga skedari i marrë si hyrje.

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

Komanda e sipërme e prerjes printon karakterin e dytë, të pestë dhe të shtatë nga çdo rresht i skedarit.

$ prerë -c 1-7 gjendje.txt Andhra Arunach Assam Bihar Chhatti

Komanda e sipërme e prerjes printon shtatë karakteret e para të çdo rreshti nga skedari.

Cut përdor një formë të veçantë për zgjedhjen e karaktereve nga fillimi deri në fund të rreshtit:

$ prerë -c 1- gjendje.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh Printimet e mësipërme të komandës duke filluar nga karakteri i parë në fund. Këtu në komandë specifikohet vetëm pozicioni i fillimit dhe pozicioni i fundit është hequr. $ prerë -c -5 gjendje.txt Andhr Aruna Assam Bihar Chhat Komanda e mësipërme printon pozicionin e fillimit në karakterin e pestë. Këtu pozicioni i fillimit është hequr dhe pozicioni i fundit është specifikuar.

3. -f (fushë): -c opsioni është i dobishëm për linjat me gjatësi fikse. Shumica e skedarëve unix nuk kanë linja me gjatësi fikse. Për të nxjerrë informacionin e dobishëm, ju duhet të prisni sipas fushave dhe jo sipas kolonave. Lista e numrit të fushave të specifikuara duhet të ndahet me presje. Gama nuk përshkruhen me opsionin -f. prerje përdor skedën si ndarës i paracaktuar i fushës, por mund të punojë edhe me ndarës të tjerë duke përdorur -d opsion.
Shënim: Hapësira nuk konsiderohet si ndarës në UNIX.

$cut -d "delimiter" -f (numri i fushës) skedari.txt

Si në dosje gjendje.txt fushat ndahen me hapësirë ​​nëse opsioni -d nuk përdoret, atëherë ai printon rreshtin e plotë:

$ prerë -f 1 gjendje.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh

Nëse përdoret opsioni -d, atëherë hapësira konsiderohet si ndarës ose ndarës i fushës:

$ prerë -d " " -f 1 gjendje.txt Komanda Andhra Arunachal Assam Bihar Chhattisgarh printon fushën nga e para në të katërtën e çdo rreshti nga skedari. Komanda:$ prerë -d " " -f 1-4 gjendje.txt Prodhimi: Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh

4. – plotësues: Siç sugjeron emri, ai plotëson daljen. Ky opsion mund të përdoret në kombinim me opsione të tjera ose me -f ose me -c.

$ cut --complement -d " " -f 1 gjendje.txt Pradesh Pradesh Assam Bihar Chhattisgarh $ cut --complement -c 5 gjendje.txt Andha Pradesh Arunchal Pradesh Assa Biha Chhatisgarh

5. –përcaktuesi i prodhimit: Si parazgjedhje delimituesi i daljes është i njëjtë me përcaktuesin e hyrjes me të cilin specifikojmë në prerjen -d opsion. Për të ndryshuar përcaktuesin e daljes përdorni opsionin –output-delimiter=”delimiter”.

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

Këtu komanda e prerë ndryshon delimiter(%) në daljen standarde ndërmjet fushave që specifikohet duke përdorur opsionin -f.

6. –versioni: Ky opsion përdoret për të shfaqur versionin e prerjes që aktualisht po ekzekutohet në sistemin tuaj.

$cut --version prerë (GNU coreutils) 8.26 Paketuar nga Cygwin (8.26-2) E drejta e autorit (C) 2016 Free Software Foundation, Inc. Licenca GPLv3+: GNU GPL version 3 ose më i ri. Ky është softuer falas: ju jeni të lirë ta ndryshoni dhe rishpërndani atë. NUK KA GARANCI, në masën e lejuar me ligj. Shkruar nga David M. Ihnat, David MacKenzie dhe Jim Meyering.

Aplikimet e komandës së prerjes

1. Si të përdorni bishtin me tuba(|): Komanda e prerjes mund të shoqërohet me shumë komanda të tjera të unix-it. Në shembullin e mëposhtëm, prodhimi i Mace komanda jepet si hyrje në prerje komandë me -f opsioni për të renditur emrat e shteteve që vijnë nga skedari state.txt në rend të kundërt.

$ cat shtet.txt | prerë -d " " -f 1 | rendit -r Chhattisgarh Bihar Assam Arunachal Andhra

Ai gjithashtu mund të lidhet me një ose më shumë filtra për përpunim shtesë. Ashtu si në shembullin e mëposhtëm, ne po përdorim komandën cat, head dhe cut dhe prodhimi i së cilës ruhet në listën e emrave të skedarit.txt duke përdorur direktivën(>).

$ cat shtet.txt | kokë -n 3 | cut -d " " -f 1 > list.txt $ cat list.txt Andhra Arunachal Assam

Faleminderit Saloni Gupta për të dhënë më shumë shembuj.


Komanda e prerjes ju lejon të zgjidhni pjesën e dëshiruar nga çdo rresht i një skedari (duke përdorur të njëjtin rregull për të gjitha rreshtat) dhe të shfaqni përzgjedhjen në ekranin e ekranit.

Komanda ka tre opsione kryesore:

  • -b- kur objekti i zgjedhjes janë bajt;
  • -Me- kur objekti i zgjedhjes janë simbolet;
  • -f- kur objekti i zgjedhjes janë elementet e formatimit të tekstit (kolona, ​​kolona, ​​etj.).

Le të fillojmë me simbolet më të dukshme (opsioni -c)

Opsioni -c

Për shembull, le të marrim skedarin /etc/shells, në tërësinë e tij duket kështu: /bin/bash /bin/tcsh /bin/csh /bin/ash /bin/ksh /bin/zsh

Tani le të përdorim komandën:

$ prerë -c 1.5 /etc/predha // // // // // //

Në këtë shembull, opsioni -c do të thotë se zgjedhja do të jetë karaktere, 1.5 do të thotë se ne zgjedhim karakteret 1 dhe 5 (duke numëruar nga 1), dhe të gjitha përmbajtjet e tjera të skedarit injorohen.

Ju mund të zgjidhni karaktere jo nga numrat serialë, por nga diapazoni:

$ prerë -c 1-5 /etc/shells /bin/ /bin/ /bin/ /bin/ /bin/ /bin/

Në këtë rast, ne zgjodhëm karaktere në rangun 1 deri në 5 (përfshirë).

Ju mund të specifikoni vargje të shumta të ndara me presje:

~$ prerë -c 1-5,8-9 /etc/predha /bin/sh /bin/sh /bin/h /bin/h /bin/h /bin/h

Tre shembujt e parë janë thjesht për qëllime demonstruese dhe nuk kanë asnjë kuptim praktik. Shembulli i mëposhtëm mund të ketë pak kuptim:

$ prerë -c 6- /etc/predha bash tcsh csh hi ksh zsh

Këtu kemi marrë një listë të predhave të disponueshme në sistem. Për ta bërë këtë, ne nuk specifikuam kufirin e duhur të diapazonit, i cili detyron komandën të nxjerrë të gjithë përmbajtjen e rreshtave nga karakteri i specifikuar deri në fund të rreshtit. Mund të lini një vizë në anën e majtë, atëherë zgjedhja do të shkojë nga fillimi i rreshtit në karakterin e specifikuar.

Shtë interesante që të gjithë këta shembuj jo gjithmonë funksionojnë me karaktere ruse (të paktën në kodimin UTF-8) - ata prodhojnë një lloj printimi të çuditshëm hap pas hapi:

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

Ky është teksti i plotë i skedarit rus.txt. Programi funksionoi si duhet.

$ prerë -c 1-5 rus.txt yts? uf? jah? $

Dhe këtu gjërat u bënë të çuditshme. Është qesharake që edhe porosia tjetër e linjës së komandës zbriti nga shkallët. Por në tastierën "e vërtetë", e thirrur duke shtypur Ctrl+Alt+F2, dalja e së njëjtës komandë dukej pak a shumë e mirë:

$ prerë -c 1-5 rus.txt yts fy yach

Siç doli në eksperimente të shumta, karakteret cirilike në kodimin UTF-8 përbëhen nga dy bajt, kështu që duhet të futni vlera të dyfishta numerike. Për shembull, nëse zëvendësoni 5 me 6 në komandën e mëparshme (ose ndonjë tjetër numër çift), atëherë gjithçka do të jetë ashtu siç duhet në emulatorin e tastierës:

$ prerë -c 1-6 rus.txt ytsu fyv yachs

Për pastërtinë e eksperimentit, unë nisa Knoppix5.1, i cili ka kodimin koi-8 si parazgjedhje, kështu që nuk ka asnjë ndryshim me Teksti në anglisht nuk vërehet - çdo shkronjë përfaqësohet nga një bajt:

$ prerë -c 1-5 rus.txt yitsuke fywap yachsmi

Kështu që duhet të keni kujdes me kodimet kombëtare!

Shpresoj që opsioni -c të jetë plotësisht i qartë, mund të kaloni në tjetrin.

Opsioni -b

Është shumë i ngjashëm me opsionin e mëparshëm, si në metodën e specifikimit të kampionimit të bajtit ashtu edhe në rezultate, sepse në shumicën e rasteve një bajt përcakton një karakter. $ prerë -b 1-6 /etc/predha /bin/b /bin/t /bin/c /bin/a /bin/k /bin/z

Ne zgjodhëm 6 bajtët e parë nga çdo rresht i skedarit /etc/shells.

Ashtu si me opsionin -c, mund të përdorni metodat mostrat n, m; -n; dhe n-. Mbetet vetëm për të shtuar se karakteret e skedave dhe hapësira e pasme (duke shkuar pas një karakteri dhe duke e fshirë atë) trajtohen si çdo karakter tjetër - ata zënë një bajt. (Nuk mund të garantoj për kodime kombëtare).

Opsioni -f

Objekti i zgjedhjes së këtij opsioni janë të njëjtat "fusha" misterioze për të cilat fola në parathënie. Doli të ishte e thjeshtë. Ne zgjedhim kolona teksti, ose kolona, ​​ose çfarëdo tjetër, të ndara me skeda. Meqenëse nuk kisha parë kurrë skedarë të tillë, m'u desh t'i krijoja ato posaçërisht për eksperimentet. Këtu janë përmbajtja e skedarit tab.txt:

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

Dhe këtu është komanda:

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

Gjithçka është ashtu siç pritej, zgjidhen dy kolonat e para. Një shembull tjetër:

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

Në përgjithësi, është e qartë, skema është e njëjtë, vetëm me kolona. Pyetja është e ndryshme - ku mund të marr skedarë të tillë me kolona të ndara me skeda për t'i përpunuar ato?

Për fat të mirë, ekziston një opsion -d që është krijuar për të punuar së bashku me opsionin -f dhe kupton kufijtë e tekstit përveç karaktereve të skedës. Drejtoria /etc është plot me skedarë që përmbajnë kolona të dhënash të ndara nga të gjitha llojet e kufizuesve; Problemi i vetëm është se ato janë mjaft të gjata për shembuj. Do të marr dhjetë rreshtat e parë nga skedari /etc/group dhe do të krijoj një skedar group10.txt.

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

Në këtë shembull, opsioni -f i thotë që të zgjedhë të gjitha kolonat, nga e para në të fundit, dhe opsioni -d specifikon karakterin që është kufiri -d: kufizuesi është një dy pika. Më sipër në ekran është skedari group10.txt në tërësi.

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

Dhe tani kemi zgjedhur kolonën e parë dhe të tretë, domethënë kemi gjetur numrin e identifikimit të secilit grup. Përndryshe, rregullat për zgjedhjen e një objekti janë të njëjta si për opsionet e tjera. Kufizuesit e kolonave, natyrisht, mund të jenë karaktere të tjera përveç dy pikave. Ato duhet të specifikohen duke përdorur opsionin -d<символ>. Ekziston gjithashtu një mënyrë më vizuale për të përdorur opsionin -d. Në vend të konstruksionit të sapo përshkruar (-d<символ>) shkruani --delim=<символ>, kjo duket më e besueshme sesa përdorimi i një hapësire.

Kanë mbetur dy opsione: -s dhe -n

Opsioni -s përdoret me opsionin -f dhe i thotë të mos shfaqë linja që nuk përmbajnë karaktere ndarëse. Është e qartë edhe për mua.

Pasiguritë e mbetura

Opsioni -n mbeti i panjohur nga unë. Ai ju thotë të mos bëni asgjë me karaktere shumëbajtëshe, veçanërisht të mos i ndani ato. Unë nuk e di se çfarë janë këto simbole, ashtu siç nuk e di se çfarë bën komanda cut me to si parazgjedhje. Ka edhe një mister tjetër. Si të tregoni një ndarës nëse është një hapësirë? Apo dy apo tre hapësira? Të gjitha eksperimentet e mia dështuan. Ndoshta dikush e di? Më shkruaj, adresa ime është në fillim të artikullit.

Kujdes: Opsionet -c, -b dhe -f mund të përdoren vetëm individualisht.

Opsionet --help dhe --version janë të njohura mirë, dhe unë nuk do të ndalem në to.

Përmbledhje e programit të prerjes

Programi është i zbatueshëm dhe funksionon në mënyrë efektive me skedarë të rregullt, domethënë me skedarë ku një strukturë e caktuar informacioni përsëritet nga rreshti në rresht (të gjitha llojet e listave, listat kontrolluese, printimet, etj.). Është e vështirë të imagjinohet se si mund të përdoret me tekst të rregullt që nuk është i ndarë në rreshta. Të kesh tre qasje (bajtë, karaktere dhe kolona) për të përcaktuar një mostër ju lejon të arrini sukses në pothuajse çdo rast, jo në një mënyrë, por në një tjetër. Komanda mund të jetë veçanërisht e dobishme si një filtër si pjesë e tubave.

Përditësuar: 17.10.2017 nga Shpresa e kompjuterit

Rreth prerjes

prerë sintaksë

prerje OPTION... [DOSJE]...

Opsione

-b, --bytes=LISTË Zgjidhni vetëm bajtet LISTË. LISTË specifikon një bajt, një grup bajtesh ose një varg bajtësh; Shikoni më poshtë.
-c, --personazhet=LISTË Zgjidhni vetëm karakteret nga çdo rresht siç specifikohet në LISTË. LISTË specifikon një karakter, një grup karakteresh ose një varg karakteresh; Shikoni më poshtë.
-d, --delimiter=DELIM përdor karakterin DELIM në vend të një skede për kufizuesin e fushës.
-f, --fushat=LISTË zgjidhni vetëm këto fusha në secilën rresht; gjithashtu printoni çdo rresht që nuk përmban karakter ndarës, përveç rastit -sështë specifikuar opsioni. LISTË specifikon një fushë, një grup fushash ose një varg fushash; Shikoni më poshtë.
-n Ky opsion është injoruar, por përfshihet për arsye përputhshmërie.
-- plotësoj plotësoni grupin e bajteve, karaktereve ose fushave të zgjedhura.
-s, --vetëm-i kufizuar mos printoni rreshta që nuk përmbajnë kufij.
--output-delimiter=STRING përdorni STRING si varg delimitues i daljes . Parazgjedhja është përdorimi i kufirit të hyrjes.
--ndihmë Shfaq një mesazh ndihme dhe dil.
--version nxirrni informacionin e versionit dhe dilni.

Shënime të përdorimit

Kur thirret prerje, përdorni -b, -c, ose -f opsion, por vetëm një prej tyre.

Nëse jo DOSJEështë specifikuar, prerje lexon nga hyrja standarde.

Duke specifikuar LISTË

Secili LISTË përbëhet nga një numër i plotë, një varg numrash të plotë ose vargje të shumta numrash të plotë të ndara me presje. Hyrja e zgjedhur shkruhet në të njëjtin rend që lexohet dhe shkruhet në dalje saktësisht një herë. Një varg përbëhet nga:

N N bajt, karakter ose fushë, e numëruar nga 1 .
N - nga N bajt, karakter ose fushë, deri në fund të rreshtit.
N- M nga N th te M bajt, karakter ose fushë (përfshirëse).
- M nga i pari tek ai M bajt, karakter ose fushë.

Për shembull, le të themi se keni një skedar të quajtur të dhëna.txt i cili përmban tekstin e mëposhtëm:

Një dy tre katër pesë alfa beta gama delta epsilon

Në këtë shembull, secila prej këtyre fjalëve ndahet nga një karakter skedë, jo me hapësira. Karakteri i skedës është kufiri i paracaktuar i prerje, kështu që si parazgjedhje do të konsiderojë një fushë si çdo gjë të kufizuar nga një skedë.

Për të "prerë" vetëm fushën e tretë të çdo rreshti, përdorni komandën:

Cut -f 3 data.txt

Tre gama

Nëse në vend të kësaj dëshironi të "preni" vetëm fushën e dytë në të katërt të çdo rreshti, përdorni komandën:

Cut -f 2-4 data.txt

Që do të nxjerrë sa vijon:

Dy tre katër beta gama delta

Nëse dëshironi të "preni" vetëm fushën e parë nga e dyta dhe nga e katërta në të pestën e çdo rreshti (duke hequr fushën e tretë), përdorni komandën:

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

Që do të nxjerrë sa vijon:

Një dy katër pesë alfa beta delta epsilon

Ose, le të themi se dëshironi fushën e tretë dhe çdo fushë pas saj, duke lënë jashtë dy fushat e para. Në këtë rast, mund të përdorni komandën:

Prerja -f 3- data.txt

Që do të nxjerrë sa vijon:

Tre katër pesë gama delta epsilon

Specifikimi i një diapazoni me LISTË vlen edhe për prerje personazhet ting ( -c) ose bajt ( -b) nga një linjë. Për shembull, për të nxjerrë vetëm karakterin e tretë deri në të dymbëdhjetë të çdo rreshti të të dhëna.txt, përdorni komandën:

Prerja e të dhënave -c 3-12.txt

Që do të nxjerrë sa vijon:

E dy tri pha beta g

Mos harroni se "hapësira" midis secilës fjalë është në të vërtetë një karakter me skedë të vetme, kështu që të dy linjat e daljes shfaqin dhjetë karaktere: tetë karaktere alfanumerike dhe dy karaktere skedash. Me fjale te tjera, prerje po heq dy karakteret e para të çdo rreshti, duke numëruar skedat si një karakter secili; nxjerrja e karaktereve nga tre deri në dymbëdhjetë, duke numëruar skedat si një karakter secili; dhe duke hequr çdo karakter pas të dymbëdhjetës.

Numërimi i bajteve në vend të karaktereve do të rezultojë në të njëjtin rezultat në këtë rast, sepse në një skedar teksti të koduar me ASCII, çdo karakter përfaqësohet nga një bajt i vetëm (tetë bit) të dhënash. Pra komanda:

Prerja -b 3-12 data.txt

Will, për dosjen tonë të dhëna.txt, prodhojnë saktësisht të njëjtin rezultat:

E dy tri pha beta g

Specifikimi i një kufiri tjetër përveç Tab

Karakteri i skedës është kufiri i paracaktuar që prerje përdor për të përcaktuar se çfarë përbën një fushë. Pra, nëse fushat e skedarit tuaj janë tashmë të kufizuara me skeda, nuk keni nevojë të specifikoni një karakter tjetër kufizues.

Sidoqoftë, mund të specifikoni çdo karakter si ndarës. Për shembull, skedari /etc/passwd përmban informacion për çdo përdorues në sistemi, një përdorues për rresht dhe çdo fushë informacioni kufizohet me një dy pika (" : "). Për shembull, linja e /etc/passwd per rrënjë përdoruesi mund të duket kështu:

Rrënja:x:0:0:rrënjë:/rrënjë:/bin/bash

Këto fusha përmbajnë informacionin e mëposhtëm, në rendin e mëposhtëm, të ndara me një karakter dy pika:

  1. Emri i përdoruesit
  2. Fjalëkalimi (treguar si x nëse është i koduar)
  3. Numri i ID-së së përdoruesit (UID)
  4. Numri ID i grupit (GID)
  5. Fusha e komentit (përdoret nga komanda e gishtit)

Emri i përdoruesit është fusha e parë në rresht, kështu që për të shfaqur çdo emër përdoruesi në sistem, përdorni komandën:

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

Që do të nxjerrë, për shembull:

Root daemon bin sys chope

(Ka shumë më tepër llogari përdoruesish në një sistem tipik, duke përfshirë shumë llogari specifike për shërbimet e sistemit, por për këtë shembull do të pretendojmë se janë vetëm pesë përdorues.)

Fusha e tretë e çdo rreshti në /etc/passwd skedari është UID (numri i ID-së së përdoruesit), kështu që për të shfaqur çdo emër përdoruesi dhe numër ID të përdoruesit, përdorni komandën:

Pritini -f 1,3 -d ":" /etc/passwd

E cila do të nxjerrë sa vijon, për shembull:

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

Siç mund ta shihni, dalja do të kufizohet, si parazgjedhje, duke përdorur të njëjtin karakter ndarës të specifikuar për hyrjen. Në këtë rast, ky është karakteri i zorrës së trashë (" : "). Megjithatë, mund të specifikoni një ndarës të ndryshëm për hyrjen dhe daljen. Pra, nëse dëshironi të ekzekutoni komandën e mëparshme, por daljen e keni të kufizuar me një hapësirë, mund të përdorni komandën:

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

Por, çka nëse dëshironi që dalja të kufizohet me një skedë? Përcaktimi i një karakteri tab në vijën e komandës është pak më i komplikuar, sepse është një karakter i pashtypshëm. Për ta specifikuar atë në vijën e komandës, duhet ta "mbroni" atë nga guaska. Kjo bëhet ndryshe në varësi të predhës që përdorni, por në predhën e paracaktuar të Linux (bash), mund të specifikoni karakterin e skedës me $"\t". Pra komanda:

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

Do të nxjerrë sa vijon, për shembull:

Root 0 daemon 1 bin 2 sys 3 chope 1000

prerë Shembuj

prerë -c 3 skedar.txt

Nxjerr karakterin e tretë të çdo rreshti të skedarit file.txt duke lënë jashtë të tjerat.

Pritini -c 1-3 file.txt

Nxjerr tre karakteret e para të çdo rreshti të skedarit file.txt duke lënë jashtë pjesën tjetër.

Pritini -c -3 file.txt

Njësoj si komanda e mësipërme. Nxjerr tre karakteret e para të çdo rreshti të file.txt.

Pritini -c 3- file.txt

Nxirrni të tretën përmes karaktereve të fundit të çdo rreshti të skedarit file.txt duke lënë jashtë dy karakteret e para.

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

Nxjerr fushën e parë të skedarit /etc/passwd, ku fushat kufizohen me dy pika (" : ").Fusha e parë e /etc/passwdështë emri i përdoruesit, kështu që kjo komandë do të nxjerrë çdo emër përdoruesi në passwd dosje.

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

Nxjerr fushat e parë dhe të gjashtë, të kufizuara me dy pika, të çdo hyrjeje në /etc/passwd skedar i cili specifikon /bin/bash si predha e hyrjes. Kjo komandë do të nxjerrë emrin e përdoruesit dhe direktorinë kryesore të çdo përdoruesi, predha e hyrjes së të cilit është /bin/bash.

Komandat e lidhura

grep— Filtro tekstin që përputhet me një shprehje të rregullt.
ngjit— Bashkoni linjat përkatëse të skedarëve.



Ju pëlqeu artikulli? Ndani me miqtë tuaj!