grep

Trovare stringhe nei file di testo usando grep con l'espressione regolare

Trovare stringhe nei file di testo usando grep con l'espressione regolare
grep è uno degli strumenti più popolari per cercare e trovare stringhe in un file di testo. Il nome 'grep' deriva da un comando nell'ormai obsoleto strumento Unix ed editor di righe, il comando ed per la ricerca globalmente attraverso un file per a espressione regolare poi stampa quelle linee erano g/ri/p, dove re era l'espressione regolare che avresti usato. Alla fine, il comando grep è stato scritto per fare questa ricerca su un file quando non si usa ed.

In questo articolo, ti mostriamo come eseguire la ricerca avanzata di stringhe utilizzando Grep con l'espressione regolare fornendoti 10 esempi pratici sulle sue implementazioni. Molti esempi discussi in questo articolo hanno implicazioni pratiche, il che significa che puoi usarli nella tua programmazione Linux quotidiana. I seguenti esempi descrivono alcuni esempi di espressioni regolari per i modelli comunemente ricercati.

Es 1: Trova un singolo noleggiatore in un file di testo

Per visualizzare le righe nel file 'book' che contengono un carattere '$', digitare:

$ grep '\$' libro

Es 2: Trova una singola stringa in un file di testo

Per emettere righe nel file 'book' che contiene la stringa '$14'.99', digitare:

$grep '\$14\.99' libro

Es 3: Trova un singolo noleggiatore speciale in un file di testo

Per visualizzare le righe nel file 'book' che contengono un carattere '\', digitare:

$ grep '\\' libro

Es 4: Linee di corrispondenza che iniziano con un determinato testo

Usa 'ˆ' in un'espressione regolare per indicare l'inizio di una riga.

Per visualizzare tutte le righe in '/usr/dict/words' che iniziano con 'pro', digita:

$ grep 'ˆpro' /usr/dict/words

Per visualizzare tutte le righe nel file 'book' che iniziano con il testo 'all'inizio', indipendentemente dal caso, digitare:

$ grep -i 'ˆall'inizio' libro

NOTA: Queste espressioni regolari sono state citate con i caratteri; questo perché alcune shell trattano altrimenti il ​​carattere 'ˆ' come un "metacarattere" speciale

Oltre alle ricerche di parole e frasi, puoi utilizzare grep per cercare modelli di testo complessi chiamati espressioni regolari. Un'espressione regolare, o "regexp", è una stringa di testo di caratteri speciali che specifica a impostato di modelli da abbinare.

Tecnicamente parlando, i modelli di parole o frasi sono espressioni regolari, solo molto semplici. In un'espressione regolare, la maggior parte dei caratteri, inclusi lettere e numeri, rappresentano se stessi. Ad esempio, il modello regexp 1 corrisponde alla stringa '1' e al modello ragazzo corrisponde alla stringa "ragazzo".

Esistono numerosi caratteri riservati chiamati metacaratteri che non si rappresentano in un'espressione regolare, ma hanno un significato speciale che viene utilizzato per creare modelli complessi. Questi metacaratteri sono i seguenti: ., *, [, ], , $ e \. È bene notare che tali metacaratteri sono comuni a quasi tutte le distribuzioni Linux comuni e speciali. Ecco un buon articolo che copre significati speciali dei metacaratteri e fornisce esempi del loro utilizzo.

Es 5: Linee di corrispondenza che terminano con un certo testo

Usa '$' come ultimo carattere del testo tra virgolette per far corrispondere quel testo solo alla fine di una riga. Per emettere righe nel file 'going' che terminano con un punto esclamativo, digitare:

$grep '!$' andando

Es 6: Linee di corrispondenza di una certa lunghezza

Per abbinare le righe di una lunghezza particolare, usa quel numero di '.' caratteri compresi tra 'ˆ' e '$': ad esempio, per far corrispondere tutte le righe larghe due caratteri (o colonne), utilizzare 'ˆ… $' come espressione regolare per la ricerca.

Per visualizzare tutte le righe in '/usr/dict/words' larghe esattamente tre caratteri, digita:

$ grep 'ˆ… $' /usr/dict/words

Per linee più lunghe, è più utile usare un costrutto diverso: 'ˆ.\numero\$', dove numero è il numero di righe da trovare. Usa ',' per specificare un intervallo di numeri.

Per visualizzare tutte le righe in '/usr/dict/words' larghe esattamente dodici caratteri, digita:

$ grep 'ˆ.\12\$' /usr/dict/words

Per visualizzare tutte le righe in '/usr/dict/words' larghe ventidue o più caratteri, digitare:

$ grep 'ˆ.\22,\$' /usr/dict/words

Es 7: Linee di corrispondenza che contengono alcune espressioni regolari

Per far corrispondere le righe che contengono un numero qualsiasi di espressioni regolari, specificare ciascuna delle espressioni regolari da cercare tra gli operatori di alternanza ('\|') come l'espressione regolare da cercare. Verranno emesse le righe che contengono una qualsiasi delle espressioni regolari date.

Per visualizzare tutte le righe in 'playboy' che contengono i pattern 'the book' o 'cake', digita:

$ grep 'il libro\|torta' playboy

Es 8: Linee di corrispondenza che contengono tutte alcune espressioni regolari

Per emettere righe che corrispondono tutti di un numero di espressioni regolari, usa grep per visualizzare le righe contenenti la prima espressione regolare che desideri abbinare e reindirizza l'output a un grep con la seconda espressione regolare come argomento. Continua ad aggiungere pipe alle ricerche grep per tutte le espressioni regolari che vuoi cercare.

Per visualizzare tutte le righe in 'playlist' che contengono entrambi i pattern 'the shore' e 'sky', indipendentemente dal caso, digitare:

$ grep -i playlist 'la riva' | grep -i cielo

Es 9: Linee di corrispondenza che contengono solo determinati caratteri

Per abbinare le righe che contengono solo determinati caratteri, usa l'espressione regolare 'ˆ[characters]*$', dove i caratteri sono quelli da abbinare.  Per visualizzare le righe in '/usr/dict/words' che contengono solo vocali, digita:

$ grep -i 'ˆ[aeiou]*$' /usr/dict/words

L'opzione '-i' corrisponde ai caratteri indipendentemente dal caso; quindi, in questo esempio, tutti i caratteri vocalici sono abbinati indipendentemente dal caso.

Es 10: Trovare frasi indipendentemente dalla spaziatura

Un modo per cercare una frase che potrebbe verificarsi con spazi extra tra le parole, o attraverso una riga o un'interruzione di pagina, è rimuovere tutti i ritorni di riga e gli spazi extra dall'input, quindi grep che. Per fare ciò, reindirizzare l'input a tr con"\r\n:\>\|-"come argomento per l'opzione '-d' (rimuovendo tutte le interruzioni di riga dall'input); pipe quello al filtro fmt con l'opzione '-u' (output del testo con spaziatura uniforme); e pipe quello per grep con il modello da cercare.

Per cercare tra le interruzioni di riga la stringa "contemporaneamente a" nel file "docs", digitare:

$ cat documenti | tr -d '\r\n:\>\|
-' | fmt -u | grep 'contemporaneamente a'

Sommario

In questo articolo, abbiamo esaminato 10 esempi pratici di utilizzo del comando Grep Linux per la ricerca e la ricerca di stringhe in un file di testo. Lungo la strada, abbiamo imparato come usare le espressioni regolari insieme a Grep per condurre ricerche complesse su file di testo. Ormai hai un'idea migliore di quanto siano potenti le funzioni di ricerca di Linux.

Ecco altre risorse per chi è interessato a saperne di più sulla programmazione Linux:

Risorse per gli amministratori di sistema

Risorse per programmatori del kernel Linux

Dizionario del file system Linux

Revisione completa di come funziona il sistema di file e directory Linux

Vulkan per utenti Linux
Con ogni nuova generazione di schede grafiche, vediamo gli sviluppatori di giochi spingere i limiti della fedeltà grafica e avvicinarsi di un passo al...
OpenTTD vs Simutrans
Creare la tua simulazione di trasporto può essere divertente, rilassante ed estremamente allettante. Ecco perché devi assicurarti di provare quanti pi...
Tutorial OpenTTD
OpenTTD è uno dei giochi di simulazione aziendale più popolari in circolazione. In questo gioco, devi creare una meravigliosa attività di trasporto. T...