Trovare stringhe in file di testo usando Grep con espressione regolare

Trovare stringhe in file di testo usando Grep con espressione regolare
Grep è uno degli strumenti più popolari per la ricerca e la ricerca di stringhe in un file di testo. Il nome 'Grep' deriva da un comando nel comando ED edi Editor Obsolete UNIX ED-The ED per la ricerca a livello globale tramite un file per un file espressione regolare poi stampa quelle linee erano g/re/p, dove è stata l'espressione regolare che avresti usato. Alla fine, il comando Grep è stato scritto per eseguire questa ricerca su un file quando non si utilizza ED.

In questo articolo, ti mostriamo di eseguire la ricerca di stringhe anticipate utilizzando Grep con espressione regolare dandoti 10 esempi pratici sulle sue implementazioni. Molti esempi discussi in questo articolo hanno implicazioni pratiche, il che significa che puoi usarli nella programmazione quotidiana di Linux. I seguenti campioni descrivono alcuni esempi di regexp per i modelli comunemente cercati.

Ex 1: trova un singolo charterer in un file di testo

Per output le righe nel file "libro" che contengono un carattere '$', digita:

libro $ grep '\ $'

Ex 2: trova una singola stringa in un file di testo

Per output le righe nel file "libro" che contiene la stringa $ 14.99 ', tipo:

$ grep '\ $ 14 \.Libro 99 '

Ex 3: trova un singolo charterer speciale in un file di testo

Per output le righe nel file "libro" che contengono un carattere '\', digita:

$ grep '\\' libro

Ex 4: righe corrispondenti che iniziano con un certo testo

Usa 'ˆ' in un regexp per indicare l'inizio di una linea.

Per produrre tutte le righe in '/usr/dict/parole' a partire da 'pro', tipo:

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

Per eliminare tutte le righe nel file "libro" che inizia con il testo "all'inizio", indipendentemente dal caso, digita:

$ grep -i 'ˆin the inizio "

NOTA: Questi regexps sono stati citati con 'personaggi; Questo perché alcune conchiglie altrimenti trattano il carattere "ˆ" come uno speciale "metacharacter"

Oltre alle ricerche di parole e frase, puoi usare Grep per cercare schemi di testo complessi chiamati espressioni regolari. Un'espressione regolare o "regexp"-è una stringa di testo di caratteri speciali che specifica a impostato di motivi da abbinare.

Tecnicamente parlando, la parola o la frase schemi sono espressioni regolari, proprio molto semplici. In un'espressione regolare, la maggior parte dei personaggi, inclusi le lettere e i numeri che si rappresentano. Ad esempio, il modello regexp 1 corrisponde alla stringa '1' e il modello ragazzo corrisponde al "ragazzo".

Ci sono un certo numero di caratteri riservati chiamati metacharacter che non si rappresentano in un'espressione regolare, ma hanno un significato speciale che viene usato per costruire modelli complessi. Questi metacharacter sono i seguenti: ., *, [, ", ˆ, $ e \. È bene notare che tali metacharacter sono comuni tra quasi tutte le distribuzioni Linux comuni e speciali. Ecco un buon articolo che copre i significati speciali dei metacharacter e fornisce esempi del loro utilizzo.

Ex 5: linee corrispondenti che terminano con un certo testo

Usa '$' come ultimo carattere del testo citato per abbinare quel testo solo alla fine di una riga. Per output le righe nel file "andando" che termina con un punto esclamativo, digitare:

$ grep '!$ 'andando

Ex 6: linee corrispondenti di una certa lunghezza

Per abbinare le linee di una lunghezza particolare, usa quel numero di ".'caratteri tra' ˆ 'e' $ '- per esempio, per abbinare tutte le righe che sono larghe due caratteri (o colonne), usa' ˆ… $ 'come regexp per cercare.

Per produrre tutte le righe in '/usr/dict/words' che sono esattamente larghe tre caratteri, tipo:

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

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

Per produrre tutte le righe in '/usr/dict/words' che sono esattamente dodici caratteri larghi, tipo:

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

Per produrre tutte le righe in '/usr/dict/words' che sono larghe ventidue o più caratteri, digita:

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

Ex 7: linee corrispondenti che contengono uno qualsiasi di alcuni regexps

Per abbinare le righe che contengono una qualsiasi di un numero di regexps, specificare ciascuno dei regexps per cercare tra gli operatori di alternanza ('\ |') come regexp per cercare. Le linee contenenti qualsiasi regexps fornite verranno emette.

Per produrre tutte le righe in "Playboy" che contiene i motivi "il libro" o "Cake", tipo:

$ grep 'the book \ | cake' Playboy

Ex 8: linee corrispondenti che contengono tutti alcuni regexps

Alle linee di output che corrispondono Tutto di un numero di regexps, usa grep per output linee contenenti il ​​primo regexp che si desidera abbinare e tubi l'uscita su un grep con il secondo regexp come argomento. Continua ad aggiungere tubi alle ricerche grep per tutti i regexps che si desidera cercare.

Per produrre tutte le linee in "Playlist" che contiene entrambi i motivi "The Shore" e "Sky", indipendentemente dal caso, tipo:

$ grep -i 'The Shore' Playlist | grep -i cielo

Ex 9: linee corrispondenti che contengono solo determinati caratteri

Per abbinare le righe che contengono solo determinati caratteri, usa il regexp 'ˆ [caratteri]*$', in cui i caratteri sono quelli da abbinare. Per output le linee 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 personaggi vocali sono abbinati indipendentemente dal caso.

Ex 10: Trovare frasi indipendentemente dalla spaziatura

Un modo per cercare una frase che potrebbe verificarsi con spazi extra tra le parole, o attraverso una linea o una pausa di pagina, è rimuovere tutti gli alti di linea e gli spazi extra dall'ingresso, e quindi Grep. Per fare ciò, tubi l'input su TR con "\ r \ n: \> \ |-" come argomento all'opzione '-d' (rimuovendo tutte le interruzioni della linea dall'ingresso); pipiscilo al filtro FMT con l'opzione '-u' (che uscirà il testo con spaziatura uniforme); e tuffalo per grep con il modello da cercare.

Per cercare tra le interruzioni di linea per la stringa "contemporaneamente a" nei "documenti", digita:

$ cat docs | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep "allo stesso tempo"

Riepilogo

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

Ecco risorse aggiuntive per coloro che sono interessati a saperne di più sulla programmazione Linux:

Risorse per gli amministratori di sistema

  • Guida di amministrazione del sistema Linux: cos'è il sistema operativo Linux e come funziona
  • Linux System Admin Guide- Panoramica della memoria virtuale Linux e cache buffer disco
  • Guida amministrativa del sistema Linux- Best practice per il monitoraggio dei sistemi Linux
  • Linux System Admin Guide- Best practice per l'esecuzione di stivali Linux e arresti
  • Linux System Admin Guide- Best practice per la realizzazione e la gestione delle operazioni di backup

Risorse per i programmatori del kernel Linux

  • Come funziona la gestione della memoria del sistema operativo Linux
  • Revisione completa dei processi del sistema operativo del kernel Linux
  • Cosa sono i meccanismi dietro la gestione delle attività del kernel di Linux
Dizionario del file system Linux

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