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.