GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie führe ich Grep mit mehreren und Mustern aus?

Ich möchte den Multi-Pattern-Match mit implizitem AND erhalten zwischen Mustern, d.h. äquivalent zum Ausführen mehrerer Greps in einer Sequenz:

grep pattern1 | grep pattern2 | ...

Wie konvertiert man es also in etwas wie?

grep pattern1 & pattern2 & pattern3

Ich würde gerne einzelnes grep verwenden, weil ich Argumente dynamisch aufbaue, also muss alles in einen String passen. Die Verwendung von Filter ist eine Systemfunktion, nicht grep, daher ist dies kein Argument dafür.

Verwechseln Sie diese Frage nicht mit:

grep "pattern1|pattern2|..."

Dies ist ein ODER Übereinstimmung mit mehreren Mustern.

Akzeptierte Antwort:

agrep kann es mit dieser Syntax tun:

agrep 'pattern1;pattern2'

Mit GNU grep , wenn es mit PCRE-Unterstützung erstellt wurde, können Sie Folgendes tun:

grep -P '^(?=.*pattern1)(?=.*pattern2)'

Mit ast grep :

grep -X '.*pattern1.*&.*pattern2.*'

(Hinzufügen von .* s als <x>&<y> stimmt mit Zeichenfolgen überein, die mit <x> übereinstimmen und <y> genau , a&b würde niemals übereinstimmen, da es keine solche Zeichenfolge gibt, die sein kann sowohl a und b gleichzeitig).

Wenn sich die Muster nicht überschneiden, können Sie möglicherweise auch Folgendes tun:

grep -e 'pattern1.*pattern2' -e 'pattern2.*pattern1'

Der beste portable Weg ist wahrscheinlich mit awk wie schon erwähnt:

awk '/pattern1/ && /pattern2/'

Mit sed :

sed -e '/pattern1/!d' -e '/pattern2/!d'

Bitte beachten Sie, dass all diese eine unterschiedliche Syntax für reguläre Ausdrücke haben.


Linux
  1. Wie werden Groß- und Kleinschreibungsmuster mit Ls abgeglichen?

  2. Wie finde ich mehrere Zeichenfolgen in Dateien?

  3. Wie man mit der Farbausgabe umgeht

  4. grep Paare von Mustern und Datei

  5. So grep ps-Ausgabe mit Headern

So führen Sie Python-Skripte mit Apache und mod_wsgi unter Ubuntu 20.04 aus

So führen Sie Windows-Software unter Linux mit Flaschen aus

So kompilieren und führen Sie C- und C++-Programme unter Linux aus

So führen Sie einen Alias ​​mit Sudo in Linux aus

Wie man ein C-Programm unter Linux schreibt und ausführt

So führen Sie Linux-GUI-Apps unter Windows 10 mit WSL und WSLg aus