Comment combiner deux instructions grep et afficher leurs résultats ensemble?

8

Supposons que je le fasse

   grep "MyVariable = False" FormA.frm

   ... result1

   grep "MyVariable = True"  FormA.frm

   ... result2

Comment écrire la commande grep pour que je puisse dire quelque chose comme

   grep "MyVariable = False" OR "MyVariable = True" FormA.frm
Code bleu
la source
Vous voulez tester si une ligne contient Var1 = FalseAND Var2 = True? Ou si un fichier contient Var1 = FalseET Var2 = True? Ou autre chose? Un exemple serait utile.
Mikel
J'ai utilisé ET par erreur. Je voulais dire "OU".
CodeBlue

Réponses:

10

Ce que vous voulez vraiment, c'est "OU", pas "ET". Si "AND" est utilisé, alors logiquement, vous n'obtiendrez aucune ligne (à moins que la ligne soit quelque chose comme "MyVariable = False ... MyVariable = True".

Utilisez "grep étendu" et l'opérateur OR ( |).

grep -E 'MyVariable = False|MyVariable = True' FormA.frm
Arcege
la source
1
Oui tu as raison. Je voulais OU, mais incorrectement spécifié ET. Merci.
CodeBlue
Par ailleurs, j'ai remarqué que cela ne fonctionne qu'avec un "E" majuscule et non un "e" minuscule. Les arguments grep sont donc sensibles à la casse, je suppose.
CodeBlue
1
@CodeBlue: vous devriez vous y habituer: presque tout est sensible à la casse sous Unix
enzotib
Ok merci @enzotib. Je viens d'un arrière-plan Windows.
CodeBlue
Il fonctionne également avec egrep(que j'utilise) au lieu de celui grep -Equi est le plus canonique.
Arcege
3

Tu devrais utiliser

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

où la \|séquence signifie une alternative, et les délimiteurs \(et \)sont pour le regroupement.

enzotib
la source
Ouaip, ça marche aussi, même si c'est un peu déroutant pour moi. Merci.
CodeBlue
1

Vous pouvez simplement faire

grep -E "MyVariable = False|MyVariable = True" FormA.frm
Sachin Divekar
la source
1

Pour répondre autrement que ce qui a déjà été dit ...

Vous pouvez également spécifier plusieurs correspondances à grep, en spécifiant l' -eoption plusieurs fois

% grep -e "MyVariable = True" -e "MyVariable = False" FormA.frm
 ... result1
 ... result2
Vince
la source
Ce serait bien si vous écriviez votre réponse en utilisant le texte de la question plutôt que de créer votre propre exemple.
G-Man dit «Réintègre Monica»