Wie kombiniere ich zwei grep-Anweisungen und zeige ihre Ergebnisse zusammen an?


8

Angenommen, ich tue es

   grep "MyVariable = False" FormA.frm

   ... result1

   grep "MyVariable = True"  FormA.frm

   ... result2

Wie schreibe ich den Befehl grep, damit ich so etwas sagen kann?

   grep "MyVariable = False" OR "MyVariable = True" FormA.frm

Sie wollen testen , ob eine Zeile enthält Var1 = FalseUND Var2 = True? Oder ob eine DateiVar1 = False UND enthält Var2 = True? Oder etwas anderes? Ein Beispiel würde helfen.
— Mikel

Ich habe UND versehentlich benutzt. Ich meinte "ODER".
— CodeBlue

Antworten:


10

Was Sie wirklich wollen, ist "ODER", nicht "UND". Wenn "AND" verwendet wird, erhalten Sie logischerweise keine Zeilen (es sei denn, die Zeile lautet "MyVariable = False ... MyVariable = True".

Verwenden Sie "Extended Grep" und den Operator OR ( |).

grep -E 'MyVariable = False|MyVariable = True' FormA.frm

1
Ja, du hast Recht. Ich wollte ODER aber falsch angegeben UND. Vielen Dank.
— CodeBlue

Übrigens ist mir aufgefallen, dass dies nur mit einem Großbuchstaben "E" und nicht mit einem Kleinbuchstaben "e" funktioniert. Grep-Argumente unterscheiden also vermutlich zwischen Groß- und Kleinschreibung.
— CodeBlue

1
@CodeBlue: Sie sollten daran gewöhnen: fast alles ist Groß- und Kleinschreibung in Unix
— enzotib

Ok danke @enzotib. Ich komme aus einem Windows-Hintergrund.
— CodeBlue

Es funktioniert auch mit egrep(was ich benutze) anstatt mit grep -Edem kanonischeren.
— Arcege

3

Du solltest benutzen

grep "MyVariable = \(False\|True\)" FormA.frm

wobei die \|Sequenz eine Alternative bedeutet und die Begrenzer \(und \)zur Gruppierung dienen.


Ja, das funktioniert auch, obwohl es für mich etwas verwirrend ist. Vielen Dank.
— CodeBlue

1

Sie können einfach tun

grep -E "MyVariable = False|MyVariable = True" FormA.frm

1

Anders zu antworten als das, was bereits gesagt wurde ...

Sie können auch mehrere Übereinstimmungen für grep angeben, indem Sie die -eOption mehrmals angeben

% grep -e "MyVariable = True" -e "MyVariable = False" FormA.frm
 ... result1
 ... result2

Es wäre schön, wenn Sie Ihre Antwort mit dem Text aus der Frage schreiben würden, anstatt sich ein eigenes Beispiel zu machen.
— G-Man sagt "Reinstate Monica"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.