2013-02-27 11 views

risposta

28

Prova questo:

grep 'expr1.*expr2\|expr2.*expr1'

Questo è un po 'più complicato di quanto dovrebbe essere se si sa che " expr2 "verrà sempre dopo" expr1 ". In tal caso, si potrebbe semplificare a:

grep 'expr1.*expr2'

+0

Piuttosto che avere un sacco di domande identiche - in precedenza ha funzionato per me, tranne che ho fatto: 'sudo grep -E -rnw '/ var/log /' -e 'Memoria insufficiente. * Gen 17 | Gen 17. * Memoria insufficiente ''- senza il backslash. Linux Mint 18.3, GNU bash 4.3.48 – nate

2

Quello che dovrebbe funzionare.

Quello che segue è un modo alternativo per ottenere lo stesso effetto:

grep -E 'expr1.*expr2|expr2.*expr1' 
+0

So che funziona :-). Ero solo stanco di invocare Grep due volte dappertutto. Ma sembra che sia più veloce scrivere semplicemente grep due volte per digitare questo. Purtroppo, spesso non conosco l'ordine delle espressioni. Speravo in qualcosa come 'grep (expr1ANDexpr2)' :-). A proposito, è ancora più veloce in una sceneggiatura rispetto a chiamare grep due volte? – sup

28

È possibile fornire diverse espressioni per cercare con diverse bandiere -e, see this post.

cioè

grep -e espr1 espr2 -e

+7

Hm, ma questa ricerca expr2 O expr2, voglio AND ... – sup

+0

@sup: in GNU grep 2.16 la riga di comando suggerita cerca entrambe le espressioni – fred

+0

Sto eseguendo GNU GREP 2.25 e in esecuzione ' grep --version | grep -e is -e software' non sembra cercare righe contenenti entrambe le espressioni, ma cerca linee contenenti un'espressione. – sup

1

In realtà il proprio suggerimento è quasi corretta se si desidera ottenere le righe che contengono entrambe le espressioni. Uso:

grep expr1 somefile | grep expr2 
+1

Oh, normalmente uso 'cat somefile | grep expr1 | grep expr2', ma penso che non sia importante quale software io uso per canalizzare la roba :-). – sup

+0

Questo farà un "e" invece di "o" operazione, non è vero? –

+0

Puoi anche usare 'grep

Problemi correlati