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
Code blau
quelle
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
Arcege
quelle
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.

Enzotib
quelle
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
Sachin Divekar
quelle
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
Vince
quelle
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"