Regex per "o" di più parole in grep


12
[Computer]$ grep "foo|bar" filename

Capisco che il comando sopra dovrebbe restituire ogni riga nel nome del file in cui esce "pippo" o "barra". Le pagine man confermano | come Regex o simbolo e il codice funziona in modo indipendente per "pippo" e "barra". Cosa mi sto perdendo?

Risposte:


21

grep usa le espressioni regolari di base (BRE) per impostazione predefinita. Dalla pagina man:

Espressioni regolari di base vs estese: nelle espressioni regolari di base i meta-caratteri?, +, {, |, (E) perdono il loro significato speciale; utilizzare invece le versioni rovesciate \ ?, +, {, \ |, (e).

Quindi devi sfuggire a |:

grep "foo\|bar" filename 

o attiva le espressioni regolari estese:

grep -E "foo|bar" filename

L'ho visto nella pagina man e frainteso. Ho pensato che significasse che \ | lo farebbe cercare l'espressione completa "foo | bar" in contrapposizione alle singole espressioni. Grazie per la risposta veloce!
Ocasta Eshu,

4
Puoi anche usare egrep(un alias per grep -E) invece di grep.
speakr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.