GNU/Linux >> Linux Esercitazione >  >> Linux

Evidenzia il testo simile a grep, ma non filtrare il testo

Usa ack. Acquista il suo --passthru opzione qui:ack. Ha l'ulteriore vantaggio di consentire espressioni regolari Perl complete.

$ ack --passthru 'pattern1' file_name

$ command_here | ack --passthru 'pattern1'

Puoi anche farlo usando grep in questo modo:

$ grep --color -E '^|pattern1|pattern2' file_name

$ command_here | grep --color -E '^|pattern1|pattern2'

Questo abbinerà tutte le linee ed evidenzierà i modelli. Il ^ corrisponde a ogni inizio di riga, ma non verrà stampato/evidenziato poiché non è un carattere.

(Nota che la maggior parte delle configurazioni utilizzerà --color per impostazione predefinita. Potresti non aver bisogno di quel flag).


Puoi assicurarti che tutte le righe corrispondano, ma non c'è nulla da evidenziare sulle corrispondenze irrilevanti

egrep --color 'apple|' test.txt 

Note:

  • egrep può essere scritto anche grep -E
  • --color di solito è predefinito nella maggior parte delle distribuzioni
  • alcune varianti di grep "ottimizzeranno" la corrispondenza vuota, quindi potresti voler utilizzare "apple|$" (vedi:https://stackoverflow.com/a/13979036/939457)

MODIFICA:

Funziona con grep di OS X Mountain Lion:

grep --color -E 'pattern1|pattern2|$'

Questo è meglio di '^|pattern1|pattern2' perché il ^ parte dell'alternanza corrisponde all'inizio della riga mentre $ corrisponde alla fine della linea. Alcuni motori di espressioni regolari non evidenzieranno pattern1 o pattern2 perché ^ già abbinati e il motore è desideroso .

Qualcosa di simile accade per 'pattern1|pattern2|' perché il motore regex nota che l'alternanza vuota alla fine della stringa del modello corrisponde all'inizio della stringa dell'oggetto.

[1]: http://www.regular-expressions.info/engine.html

PRIMA MODIFICA:

Ho finito per usare perl:

perl -pe 's:pattern:\033[31;1m$&\033[30;0m:g'

Ciò presuppone che tu abbia un terminale compatibile con ANSI.

RISPOSTA ORIGINALE:

Se sei bloccato con uno strano grep , potrebbe funzionare:

grep -E --color=always -A500 -B500 'pattern1|pattern2' | grep -v '^--'

Regola i numeri per ottenere tutte le righe che desideri.

Il secondo grep rimuove semplicemente i -- estranei righe inserite dallo stile BSD grep su Mac OS X Mountain Lion, anche quando il contesto di corrispondenze consecutive si sovrappone.

Pensavo che GNU grep avesse omesso il -- righe quando il contesto si sovrappone, ma è passato un po' di tempo quindi forse ricordo male.


Linux
  1. 3 comandi Linux da conoscere per la manipolazione del testo

  2. Come evidenziare una parola nell'output di "cat"??

  3. Decomprimere un file .gz per ottenere un file di testo ma ottenere un file binario??

  4. VPS vs VPN:nomi simili, ma funzioni completamente diverse

  5. Come trovare testo specifico usando GREP su Linux

Grep Command in Linux (Trova testo nei file)

Come utilizzare il comando Grep per trovare testo nei file

Manipolazione del testo con sed e grep

Manipolazione del testo dalla riga di comando con grep

Come estrarre indirizzi e-mail da file di testo in Linux

Trova testo nei file su Linux usando grep