Как объединить два оператора grep и отобразить их результаты вместе?

8

Предположим, я делаю

   grep "MyVariable = False" FormA.frm

   ... result1

   grep "MyVariable = True"  FormA.frm

   ... result2

Как написать команду grep, чтобы я мог сказать что-то вроде

   grep "MyVariable = False" OR "MyVariable = True" FormA.frm
CodeBlue
источник
Вы хотите проверить, содержит ли строкаVar1 = False AND Var2 = True? Или файл содержит Var1 = FalseAND Var2 = True? Или что-то другое? Пример поможет.
Микель
Я использовал AND по ошибке. Я имел в виду «ИЛИ».
CodeBlue

Ответы:

10

То, что вы действительно хотите, это «ИЛИ», а не «И». Если используется «И», то по логике вы не получите никаких строк (если строка не похожа на «MyVariable = False ... MyVariable = True».

Используйте "расширенный grep" и оператор ИЛИ ( |).

grep -E 'MyVariable = False|MyVariable = True' FormA.frm
Arcege
источник
1
Да, ты прав. Я хотел ИЛИ, но неправильно указал И. Спасибо.
CodeBlue
Между прочим, я заметил, что это работает только с заглавной буквой «Е», а не строчной «е». Так что аргументы grep чувствительны к регистру.
CodeBlue
1
@CodeBlue: к этому следует привыкнуть: в Unix почти все регистрозависимо
enzotib
Хорошо, спасибо @enzotib. Я пришел из фона Windows.
CodeBlue
Это также работает с egrep(который я использую) вместо того, grep -Eкоторый является более каноническим.
Arcege
3

Вы должны использовать

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

где \|последовательности означают альтернативу, а разделители \(и \)предназначены для группировки.

enzotib
источник
Да, это также работает, хотя это немного смущает меня. Спасибо.
CodeBlue
1

Вы можете просто сделать

grep -E "MyVariable = False|MyVariable = True" FormA.frm
Сачин Дивекар
источник
1

Чтобы ответить по-другому, чем то, что уже было сказано ...

Вы также можете указать несколько совпадений для grep, указав -eопцию несколько раз

% grep -e "MyVariable = True" -e "MyVariable = False" FormA.frm
 ... result1
 ... result2
Винс
источник
Было бы неплохо, если бы вы написали свой ответ, используя текст вопроса, а не создавали собственный пример.
G-Man говорит: «Восстановите Монику»