Comandă de tăiere Linux
Pe Unix -ca cum ar fi sistemele de operare, comanda de tăiere elimină („decupează”) secțiuni ale fiecărei linii a fișierelor sau fișierelor.
Acest document acoperă versiunea GNU / Linux a cut.
Sintaxă
cut OPTION... ...
Opțiuni
-b, –bytes = LIST | Selectați numai octeții din fiecare linie, după cum se specifică în LIST. LIST specifică un octet, un set de octeți sau o gamă de octeți; vezi Specificarea LISTEI de mai jos. |
-c, –characters = LIST | Selectați numai caracterele din fiecare linie, așa cum este specificat în LISTA. LIST specifică un caracter, un set de caractere sau o gamă de caractere; consultați Specificarea LISTEI de mai jos. |
-d, –delimiter = DELIM | utilizați caracterul DELIM în loc de o filă pentru delimitatorul de câmp. |
-f, –fields = LIST | selectați numai aceste câmpuri pe fiecare linie; imprimați, de asemenea, orice linie care nu conține caracter delimitator, cu excepția cazului în care este specificată opțiunea -s. LIST specifică un câmp, un set de câmpuri sau o gamă de câmpuri; vezi Specificarea LISTEI de mai jos. |
-n | Această opțiune este ignorată, dar este inclusă din motive de compatibilitate. |
–complement | completează setul de octeți, caractere sau câmpuri selectate. |
-s, –only-delimited | nu imprimați linii care nu conțin delimitatori. |
–output-delimiter = STRING | utilizați STRING ca șir de delimitare de ieșire. Implicit este să folosiți delimitatorul de intrare. |
–help | Afișați un mesaj de ajutor și ieșiți. |
–version | ieșire informații despre versiune și ieșire. |
Note de utilizare
Când invocați tăiere, utilizați opțiunea -b, -c sau -f, dar numai una dintre ele.
Dacă nu este specificat niciun FIȘIER, tăierea citește din intrarea standard.
Specificare LISTĂ
Fiecare LISTĂ este alcătuită dintr-un număr întreg, un interval de numere întregi sau intervale multiple întregi separate prin virgule. Intrarea selectată este scrisă în aceeași ordine în care este citită și este scrisă pentru a ieși exact o dată. Un interval constă din:
De exemplu, să spunem că aveți un fișier numit data.txt care conține următorul text:
onetwothreefourfivealphabetagammadeltaepsilon
În acest exemplu, fiecare dintre aceste cuvinte este separat de un caracter tab, nu de spații. Caracterul tab este delimitatorul implicit al tăierii, deci va considera în mod implicit că un câmp este orice delimitat de o filă.
Pentru a „tăia” doar al treilea câmp al fiecărei linii, utilizați comanda:
cut -f 3 data.txt
… care va afișa următoarele:
threegamma
Dacă în schimb doriți să „tăiați” doar câmpul al doilea până la al patrulea din fiecare linie, utilizați comanda:
cut -f 2-4 data.txt
… care va afișa următoarele:
twothreefourbetagammadelta
Dacă doriți să„ tăiați ”doar primul-prin- al doilea și al patrulea-al cincilea câmp al fiecărei linii (omițând al treilea câmp), utilizați comanda:
cut -f 1-2,4-5 data.txt
… care va afișa următoarele:
onetwofourfivealphabetadeltaepsilon
Sau, să vă spunem doriți al treilea câmp și fiecare câmp după acesta, omițând primele două câmpuri. În acest caz, puteți utiliza comanda:
cut -f 3- data.txt
… care va afișa următoarele:
threefourfivegammadeltaepsilon
Specificarea unui interval cu LIST se aplică și pentru tăierea caracterelor (-c) sau a octeților (-b) dintr-o linie. De exemplu, pentru a afișa doar caracterul al treilea până la al doisprezecelea al fiecărei linii de date.txt, utilizați comanda:
cut -c 3-12 data.txt
… care va genera următoarele:
etwothrephabetag
Rețineți că „spațiul” dintre fiecare cuvânt este de fapt un singur caracter tab, astfel încât ambele linii de ieșire afișează zece caractere: opt caractere alfanumerice și două caractere tab. Cu alte cuvinte, tăiere omite primele două caractere ale fiecărei linii, numărând filele ca câte un caracter fiecare; ieșirea de caractere de la trei la doisprezece, numărând filele ca câte un caracter fiecare; și omiterea oricăror caractere după al doisprezecelea.
Numărarea octeților în loc de caractere va avea ca rezultat aceeași ieșire în acest caz, deoarece într-un fișier text codat ASCII, fiecare caracter este reprezentat de un singur octet (opt biți) ) de date. Deci comanda:
cut -b 3-12 data.txt
… va produce, pentru fișierul nostru data.txt, exact aceeași ieșire:
etwothrephabetag
Specificarea unui alt delimitator decât tab
Caracterul tabului este delimitatorul implicit pe care tăierea îl folosește pentru a determina ce constituie un câmp. Deci, dacă câmpurile fișierului dvs. sunt deja delimitate de file, nu este necesar să specificați un caracter diferit.
Cu toate acestea, puteți specifica orice caracter ca delimitator.De exemplu, fișierul / etc / passwd conține informații despre fiecare utilizator din sistem, câte un utilizator pe linie și fiecare câmp de informații este delimitat de două puncte („:”). De exemplu, linia / etc / passwd pentru utilizatorul root poate arăta astfel:
root:x:0:0:root:/root:/bin/bash
Aceste câmpuri conțin următoarele informații, în următoarea ordine, separat printr-un caracter de două puncte:
- Nume utilizator
- Parolă (afișată ca x dacă este criptată)
- Număr ID utilizator (UID)
- Număr ID grup (GID)
- Câmp comentariu (folosit de comanda degetului)
- Director de acasă
- Shell
Numele de utilizator este primul câmp de pe linie, deci pentru a afișa fiecare nume de utilizator pe sistem, utilizați comanda:
cut -f 1 -d ":" /etc/passwd
… care va afișa , de exemplu:
rootdaemonbinsyschope
(Există mai multe conturi de utilizator pe un sistem tipic, inclusiv multe conturi specifice serviciilor de sistem, dar pentru acest exemplu ne vom preface există doar cinci utilizatori.)
Al treilea câmp al fiecărei linii din fișierul / etc / passwd este UID (număr ID utilizator), deci pentru a afișa fiecare nume de utilizator și număr ID utilizator, utilizați comanda:
… care va afișa următoarele, de exemplu:
root:0daemon:1bin:2sys:3chope:1000
După cum puteți vedea, ieșirea va fi delimitat, implicit, utilizând același caracter delimitator specificat pentru intrare. În acest caz, acesta este caracterul colonului („:”). Cu toate acestea, puteți specifica un delimitator diferit pentru intrare și ieșire. Deci, dacă ați dorit să executați comanda anterioară, dar să aveți ieșirea delimitată de un spațiu ai putea folosi comanda:
cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000
Dar dacă vrei ca ieșirea să fie delimitată de o filă ? Specificarea unui caracter tab pe linia de comandă este ceva mai complicat, deoarece este un caracter neprimabil. Pentru a-l specifica pe linia de comandă, trebuie să îl „protejați” de shell. Acest lucru se face diferit în funcție de shell-ul dvs. Folosiți din nou, dar în shell-ul implicit Linux (bash), puteți specifica caracterul tabului cu $ „\ t”. Deci comanda:
cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd
… va afișa următoarele, de exemplu:
root0daemon1bin2sys3chope1000
Exemple
cut -c 3 file.txt
Afișează al treilea caracter al fiecărei linii a fișierului file.txt, omițând celelalte.
cut -c 1-3 file.txt
Afișați primele trei caractere din fiecare linie a fișierului file.txt, omiind restul.
cut -c -3 file.txt
La fel ca comanda de mai sus. Afișați primele trei caractere ale fiecărei linii a fișierului.txt.
cut -c 3- file.txt
Afișați al treilea prin ultimele caractere ale fiecărei linii ale fișierului fișier.txt, omițând primele două caractere.
cut -d ":" -f 1 /etc/passwd
Afișează primul câmp al fișierului / etc / passwd, unde câmpurile sunt delimitate de două puncte („:”). Primul câmp din / etc / passwd este numele de utilizator, deci această comandă va afișa fiecare nume de utilizator din fișierul passwd.
grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6
Se afișează primul și al șaselea câmp, delimitat de două puncte, de orice intrare în fișierul / etc / passwd care specifică / bin / bash ca shell de conectare. Această comandă va afișa numele de utilizator și directorul principal al oricărui utilizator al cărui shell de autentificare este / bin / bash.