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


8

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

   grep "MyVariable = False" FormA.frm

   ... result1

   grep "MyVariable = True"  FormA.frm

   ... result2

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

   grep "MyVariable = False" OR "MyVariable = True" FormA.frm

Вы хотите проверить, содержит ли строка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

1
Да, ты прав. Я хотел ИЛИ, но неправильно указал И. Спасибо.
CodeBlue

Между прочим, я заметил, что это работает только с заглавной буквой «Е», а не строчной «е». Так что аргументы grep чувствительны к регистру.
CodeBlue

1
@CodeBlue: к этому следует привыкнуть: в Unix почти все регистрозависимо
enzotib

Хорошо, спасибо @enzotib. Я пришел из фона Windows.
CodeBlue

Это также работает с egrep(который я использую) вместо того, grep -Eкоторый является более каноническим.
Arcege

3

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

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

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


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


1

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

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

% grep -e "MyVariable = True" -e "MyVariable = False" FormA.frm
 ... result1
 ... result2

Было бы неплохо, если бы вы написали свой ответ, используя текст вопроса, а не создавали собственный пример.
G-Man говорит: «Восстановите Монику»
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.