PcPedia >> non subire l informatica!

  • Increase font size
  • Default font size
  • Decrease font size
  • default color
  • black color
Home LINUX Comandi Unix Comandi di Filtro sui file

Comandi di Filtro sui file

E-mail Stampa PDF

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
Nuovo Cerca
+/-
Commenta
Nome:
Email:
 
Website:
Titolo:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:D:angry::angry-red::evil::idea::love::x:no-comments::ooo::pirate::?::(
:sleep::););)):0
 
Please input the anti-spam code that you can read in the image.
Contethor |2010-06-14 01:27:38
Ottima guida complimenti! :D Mi funziona tutto alla perfezione, tranne che con il comando tr non riesco ad eliminare le parentesi quadre e le virgolette. :?:

!joomlacomment 4.0 Copyright (C) 2009 Compojoom.com . All rights reserved."