2017-11-22 1 views
1

grep -o Ich habe zwei verschiedene greps wie untenWie mit -n

grep -on "\w*_text1 \w*" test.log 
grep -n "text2" test.log 

Wie kann ich sie miteinander zu kombinieren?

Grundsätzlich habe ich Worte zu drucken, die _text1 und Linien enthalten, die text2

Erwartetes Ergebnis hat: 12:: 53:

1: _text1

2 Adresse 32,087 INFO .. .. - Speichern text2

3: Telefon _text1

4: 12: 53: 33,087 INFO .... - text2

+0

Kombinieren wie? Fügen Sie der Frage eine Beispieleingabe und erwartete Ausgabe hinzu. – choroba

+0

@choroba Ich habe meine Frage aktualisiert – kzharas210

Antwort

2

Vorausgesetzt, dass Sie nur die kombinierten Ergebnisse wollen, sollten dies tun:

grep -on "\w*_text1 \w*\|.*text2.*" test.log 

Erläuterung:

  • Die beiden Muster wurden mit \| kombiniert.
  • Das zweite Muster wurde von .* umgeben, um der gesamten Linie zu entsprechen; Dies deaktiviert effektiv -o für dieses bestimmte Muster.

Beispielausgabe:

$ cat test.log 
not this 
begin foo_text1 bar end 
and not this 
hello text2 bye 
finally not this 

$ grep -on "\w*_text1 \w*" test.log 
2:foo_text1 bar 

$ grep -n "text2" test.log 
4:hello text2 bye 

$ grep -on "\w*_text1 \w*\|.*text2.*" test.log 
2:foo_text1 bar 
4:hello text2 bye 
+0

Thnx, es funktioniert jetzt. Ich habe vergessen, dass es Regex ist und ich kann 'or' verwenden :) – kzharas210

0

Verwenden Logik aktualisiert OR:

grep -onE "_text1|text2" test.log 
+0

Es funktioniert irgendwie, aber es druckt nicht ** ganze Zeile ** wo 'Text2' auftritt – kzharas210

+0

Dann loswerden der -o:' Grep -E 'ist genug. –