grep:
cerca in uno o più file le righe contenenti la stringa specificata e le visualizza.Spesso viene utilizzato in pipe per la ricerca nei file di database.
Supponiamo di possedere un piccolo database di numeri di telefono, e vie di amici:
bt home # cat rubrica.txt
Francesco Treviso via dei pini 8 cell 33311223344
Monica Padova piazza Europa 16 cell 32822334455
Alberto Porcia via piave 18 cell 34899887766
Marco Udine via lauco 170 cell 33321212121
Giuseppe Milano via cipriani 2 cell 38890887772
Giulia Trieste via Madonnina 15 cell 36655443322
Fabio Roma via Carducci 345 cell 33300998877
Possiamo cercare una particolare linea all’interno del file:
bt home # grep Giulia rubrica.txt
Giulia Trieste via Madonnina 15 cell 36655443322
-i ignora le differenze maiuscole-minuscole
-c conta il numero di linee in cui avvengono le occorrenze
-v visualizza le linee che non hanno nessuna occorrenza (inverte)
-n mostra anche il numero di linea
-s restituisce 0 se ha trovato corrispondenze,1 se non ne ha trovate, 2 per errori
-l elenca i nomi dei file in cui si sono occorrenze ma non le linee
Molto utilizzato il grep in pipe con altri comandi; ad esempio se volessimo trovare fra i numerosi processi attivi dell’ utente root solo “kwrite” (per magari terminarlo con kill):
bt home # ps -fu root |grep kwrite
root 6711 3141 0 10:46 ? 00:00:02 kwrite [kdeinit]
root 19659 3141 0 11:28 ? 00:00:00 kwrite [kdeinit]
root 25484 7083 0 11:46 pts/1 00:00:00 grep kwrite
o se volessimo scoprire se è presente il file “appunti.txt” in una directory molto affollata:
bt ~ # ls –al | grep appunti.txt
appunti.txt
molto versatile l’utilizzo di grep con le espressioni regolari (vedi).
fgrep:
simile a grep, serve a cercare più target contemporaneamente;ogni target distinto deve trovarsi su una linea distinta.
egrep:
si può utilizzare come fgrep per la ricerca di più target ma offre la possibilità di inserirne più di uno su una stessa linea.
bt ~ # egrep “marco|giulia|fabio|nicola” rubrica.txt
look:
visualizza tutte le righe che iniziano con una stringa specificata:
è analogo a grep “^parola” file.txt (vd espressioni regolari).
bt ~ # look ‘marco’ rubrica.txt
bt ~ # grep ‘^marco’ rubrica.txt
cut:
permette di estrarre una parte di un file , in particolare è utile nell’estrazione di campi da uno o più record.
-c posizione dei caratteri da selezionare
-d specificazione del delimitatore dei campi (default è tabulazione)
-f campi da selezionare
Possiamo creare un file con solo i numeri di telefono e nomi del record “rubrica.txt”:
bt home # cut -f1,4 rubrica.txt>rub_breve.txt
o con solo i primi tre campi:
bt ~ # cut –f1-3 rubrica.txt > rub_campi123.txt
o con tutti i campi tranne il secondo:
bt ~ # cut –f1,3- rubrica.txt>rub_campi1345.txt
o ancora usarlo in pipe per ridurre l’output di ls:
bt ~ # ls –l | cut –f1,2
colrm:
rimuove la colonna o campo specificati
paste:
permette di combinare insieme più file
join:
crea un nuovo file unendo due file esistenti sulla base di un campo chiave che contiene voci comuni ad entrambi. Tale comando richiede che entrambi i file siano ordinati allo stesso modo prima di essere uniti.
Di default il primo campo comune ai file è quello usato per stabilire l’unione, tuttavia tramite l’opzione –j si può specificare il campo in cui cercare le parole comuni per entrambi i file.
bt ~ # join –j12 –j23 file1 file2 > file3
ovviamente anche con join è possibile specificare i delimitatori di campo (usando l’opzione –t)
immaginiamo di avere un file rubrica2.txt in cui sono contenuti i numeri di casa di alcuni già nella lista precedente (rubrica.txt):
bt home # cat rubrica2.txt
Francesco casa 09883773
Monica casa 021111111
Alberto casa 043311111
Marco casa 06222222
Con join possiamo unire le parti comuni ai due record:
bt home # join rubrica.txt rubrica2.txt
Francesco Treviso via dei pini 8 cell 33311223344 casa 09883773
Monica Padova piazza Europa 16 cell 32822334455 casa 021111111
Alberto Porcia via piave 18 cell 34899887766 casa 043311111
Marco Udine via lauco 170 cell 33321212121 casa 06222222
wc:
è un word counter, ossia conta di default sia le parole, le linee, i caratteri di un file.
-c conta i byte (caratteri)
-m conta i caratteri
-l conta le linee
-w conta le parole
bt ~ # ls -1 |wc –l
ad esempio conta i file presenti nella directory corrente sfruttando una pipe di ls.
sort:
ordina le linee di un file; di default segue l’ ordinamento ASCII ( [0 9], [A Z], [a z] ).
Si può anche usarlo per combinare più file in un unico più ordinato: nell’esempio seguente abbiamo uniti tre liste di nomi in un unico file ordinato.
bt ~ # sort nomi1 nomi2 nomi3 > nomiordinati
-o permette di riordinare il file e sovrascriverlo
-f ignora maiuscole e minuscole
-n ordinamento numerico crescente (importante poiché con l’ordinamento alfabetico di default 100 verrebbe prima di 20..con questa opzione si ordinano i numeri)
-r inverte l’ordinamento
-m ordina in base ai mesi dell’anno (Jan,Feb,Mar…)
-b ignora gli spazi bianchi (altrimenti sarebbero messi all’inizio)
-d ignora i numeri e gli spazi e si occupa solo delle lettere
-i ignora i caratteri non stampabili
-t serve ad indicare a sort un separatore di campo alternativo a tab o spazio (ad esempio –i “:”
-u elimina le linee ripetute
E’ possibile ordinare un file partendo anche dal secondo campo di un record:
bt ~ # sort +1 -o nomi.txt
uniq:
elimina le linee ripetute nei file: ha lo stesso effetto di sort –u
cmp:
confronta i contenuti di due file e comunica la posizione della loro prima differenza (di default).
-l riporta ogni differenza
-s riporta solo un valore di uscita e non le differenze
comm:
confronta due file ordinati e mostra le linee uguali o diverse; di default dopo il confronto riporta tre colonne: nella prima le linee contenute solo nel primo file, nella seconda quelle presenti solo nel secondo, nella terza le linee comuni ad entrambi.
-1 toglie la prima colonna dall’output
-2 toglie la seconda colonna dall’output
-3 toglie la terza colonna dall’output (solo le differenze quindi)
diff:
confronta due file o directory e riporta tutte le differenze tra i due (solo per file ASCII).
Il suo output è progettato per essere poi sfruttato da comando patch.
-b ignora spazi contigui
-i ignora maiuscole e minuscole
-w ignora spazi e tab
-r esegue ricorsivamente anche nelle sottodirectory
patch:
permette di aggiornare un file in un altro utilizzando il file delle differenze generato da diff:
bt ~ # patch file.txt diffs
dircmp:
confronta le directory e ne specifica le differenze.
tr:
traduce i caratteri secondo i modelli in argomento.E’ uno dei rari programmi che non accetta nomi di file come argomento: è quindi necessaria la re direzione dell’input:
possiamo usarlo per rendere maiuscole tutte le lettere di un testo:
bt ~ # tr ‘[a-z]’ ‘[A-Z]’ < testo.txt
o per sostituire il separatore di campo “:” con uno di tabulazione
bt ~ # tr ‘:’ ‘\t’ < /etc/passwd
possiamo anche “cifrare” un messaggio con il semplice algoritmo rot13 (ossia spostando ogni lettera di 13 posizioni):
bt home # cat topsecret.txt
Un esempio sull'uso del comando tr
che traduce ogni carattere con la lettera distante
13 lettere.La caratteristrica del ROT13 e' che si usa
lo stesso programma sia per cifrare che per decifrare
poiche' ovviamente le lettere sono 26...
bt home # tr '[a-m][n-z][A-M][N-Z]' '[n-z][a-m][N-Z][A-M]' < topsecret.txt > topsecret.rot13
bt home # cat topsecret.rot13
Ha rfrzcvb fhyy'hfb qry pbznaqb ge
pur genqhpr btav pnenggrer pba yn yrggren qvfgnagr
13 yrggrer.Yn pnenggrevfgevpn qry EBG13 r' pur fv hfn
yb fgrffb cebtenzzn fvn cre pvsener pur cre qrpvsener
cbvpur' biivnzragr yr yrggrer fbab 26...
o “oscurare” ogni numero di telefono della nostra rubrica (usando le espressioni regolari):
bt ~ # tr ‘[0-9]’ ‘#*’ < rubrica.txt > rubricaoscurata.txt
Rimandiamo inoltre alla sezione dedicata ad AWK.
Sostenete il rinnovamento del sito dando un'occhiata ai link pubblicitari che vi interessano.
| Commenti |
|













