Dec 302013
 

Probabilmente tutti coloro che utilizzano un terminale conoscono il comando grep, dalla sua pagina man:

grep cerca nei file dati in input (o standard input se nessun file viene dato, o se un singolo trattino-meno (-) è dato come nome del file) per le linee che contengono una corrispondenza al modello dato. Per impostazione predefinita, grep stampa le linee corrispondenti.

Quindi questo è lo strumento migliore per cercare all’interno di file di grandi dimensioni per una stringa specifica, o il nome di un processo specifico all’interno dell’elenco completo dei processi in esecuzione, ma ha un piccolo limite, cerca la stringa esatta che si chiede, mentre talvolta potrebbe essere utile fare una ricerca “approssimata” o anche detta “fuzzy”.

Per questo obiettivo il programma agrep è stato sviluppato, da wikipedia possiamo vedere qualche dettaglio di questo software:

agrep (grep approssimativo) è un programma di ricerca di stringhe approssimativo proprietario, sviluppato da Udi Manber e Sun Wu tra il 1988 e il 1991, per l’utilizzo con il sistema operativo Unix. E’ stato poi portato su OS/2, DOS e Windows.

Seleziona l’algoritmo più adatto per la query corrente da una varietà delle più veloci (built-in) algoritmi di ricerca tra stringhe, tra cui Manber e l’algoritmo bitap di Wu basato sulla distanza Levenshtein.

agrep è anche il motore di ricerca nel programma indicizzatore GLIMPSE. agrep è gratuito solo per uso privato e non commerciale, e appartiene alla University of Arizona.

Quindi è closed source, ma per fortuna c’è un’alternativa open source source: tre-agrep




Libreria Tre

TRE è una libreria compatibile POSIX per effettuare regexp (regular expression), robusta, legegra ed efficiente con alcune caratteristiche interessanti come la ricerca approssimativa ( fuzzy ).

Ricerca approssimativa

LA ricerca approssimativa permette di fare ricerche per approssimazione, cioè, permette di fare ricerche vicine alla stringa cercata in qualche misura di vicinanza. TRE utilizza la misura di modifica della distanza ( conosciuta anche come la distanza Levenshtein ), dove possono essere inseriti caratteri, eliminati o sostituiti nel testo cercato, al fine di ottenere una corrispondenza esatta . Ogni inserimento, eliminazione o sostituzione aggiunge distanza, o costo, del risultato. TRE può riportare i risultati che hanno un costo inferiore rispetto ad un determinato valore di soglia . TRE può anche essere utilizzato per cercare corrispondenze con il più basso costo.

Installazione

Tre-agrep di solito non è installato per impostazione predefinita nelle più comuni distribuzioni Linux, ma è disponibile nei repository quindi si può facilmente installarlo con il gestore dei pacchetti della vostra distribuzione, ad esempio per Debian/Ubuntu e Mint è possibile utilizzare il comando:

apt-get install tre-agrep

Uso Base

L’utilizzo è mostrato più facilmente con qualche semplice esempio di questo potente comando, dato il file example.txt file che contiene:

sumé
RÉSUMÉ
resume
Resümee
rèsümê
Resume
linuxaria

Questi sono i risultati del comando tre-agrep con qualche opzione diversa:

 mint-desktop tmp # tre-agrep resume example.txt
resume
 
mint-desktop tmp # tre-agrep -i resume example.txt
resume
Resume
 
mint-desktop tmp # tre-agrep -1 -i resume example.txt
resume
Resümee
Resume
 
mint-desktop tmp # tre-agrep -2 -i resume example.txtsumé
RÉSUMÉ
resume
Resümee
Resume

Come si può vedere senza alcuna opzione si ottiene lo stesso risultato di un normale grep, l’opzione -i è utilizzato per ignorare le distinzioni tra maiuscole e minuscole, e le opzioni interessanti sono il -1 e -2, queste sono le distanze consentite nella ricerca, quindi più grande è il numero più risultati si ottengono, in quanto si permette di avere maggiore “distanza” dalla stringa da ricercare.

Per vedere la distanza di ogni risultato è possibile utilizzare l’opzione -s che stampa ogni costo prima del risultato:

mint-desktop tmp # tre-agrep -5 -s -i resume example.txt
2:Résumé
2:RÉSUMÉ
0:resume
1:Resümee
3:rèsümê
0:Resume
5:linuxaria

Quindi in questo esempio la stringa Resume costa 0, mentre linuxaria costa 5.

Altre opzioni interessanti sono quelle per assegnare un costo per le diverse operazioni:

-D NUM, –delete-cost = NUM Imposta il costo di caratteri mancanti a NUM.
-I NUM, –insert-cost = NUM Imposta il costo di caratteri extra a NUM.
-S NUM, –substitute-cost = NUM Imposta il costo di caratteri errati a NUM. Notare che una cancellazione (un carattere mancante) ed un inserimento (un carattere extra) insieme costituiscono un carattere sostituito, ma il costo sarà quello di una cancellazione ed un inserimento sommati.

Conclusioni

Il comando tre-agrep è un altro piccolo strumento che può salvarvi la giornata se lavorate molto con terminali e bash script, tutto quello che dovete fare è ricordarvi che esiste al momento giusto.


Popular Posts:

Flattr this!

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*