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

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

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.


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

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

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»
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.