Unix - grep mehrere Schlüsselwörter aus einer Datei

695
user1736786

Ich habe ein Skript, das in allen Protokolldateien nach einem Schlüsselwort sucht. Es funktioniert gut.

LOG_FILES={ "/Sandbox/logs/*" }  for file in $; do grep $1 $file done 

Dies funktioniert nur für 1 Keyword. Was ist, wenn ich nach mehr als 1 Stichwörtern suchen möchte, sagen Sie 4 oder vielleicht sogar 10 Stichwörter.

Also würde ich eingeben:

./myfile.sh 120.2.1.1 Chrome 400 POST 

Es würde in allen Protokolldateien nach IP-Adresse, Chrome, 400 und POST-Schlüsselwörtern suchen. Ich sehe im Internet, sie haben so etwas:

egrep 'A1|A2|A3' filename 

Dies gibt an, dass die Ausgabe entweder A1 oder A2 oder A3 wird, aber ich möchte die Ausgabe, wenn es A1 und A2 und A3 ist. Ich bin nicht sicher, wie ich das machen soll. Jede Hilfe wäre sehr dankbar.

tks

0

1 Antwort auf die Frage

0
AFH

Die einfachste Antwort ist die Verwendung einer Folge von grepAnrufen: -

grep 'A1' filename | grep 'A2' | grep 'A3' 

Um mit einer unabhängigen Anzahl von Parametern umgehen zu können, müssen Sie eine Laufzeichenfolge erstellen: -

str="cat filename" while [ $# -gt 0 ]; do a="$a|grep '$1'"; shift; done eval "$a" 

Ich vermeide zwar generell unnötige catAufrufe (Entschuldigung wegen des Wortspiels), aber die Verwendung in diesem Fall vereinfacht das Skript erheblich. Ich habe nicht alle Kombinationen mit eingebetteten Leerzeichen in den Parametern getestet, aber das obige Skript scheint das Zitieren in einfachen Fällen korrekt zu behandeln.