如何合并两个grep语句并将它们的结果一起显示?


8

假如我做

   grep "MyVariable = False" FormA.frm

   ... result1

   grep "MyVariable = True"  FormA.frm

   ... result2

如何编写grep命令,以便我可以说类似

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

您想测试一行是否包含Var1 = FalseAND Var2 = True吗?或者文件是否包含Var1 = FalseAND Var2 = True?或者是其他东西?一个例子会有所帮助。
Mikel 2012年

我误用了AND。我的意思是“或”。
CodeBlue 2012年

Answers:


10

您真正想要的是“或”,而不是“与”。如果使用“ AND”,那么从逻辑上讲,您将不会看到任何行(除非该行类似于“ MyVariable = False ... MyVariable = True”。

使用“ extended grep”和OR运算符(|)。

grep -E 'MyVariable = False|MyVariable = True' FormA.frm

1
你是对的。我想要OR,但错误地指定了AND。谢谢。
CodeBlue 2012年

顺便说一句,我注意到这仅适用于大写字母“ E”,而不适用于小写字母“ e”。所以我想grep参数区分大小写。
CodeBlue 2012年

1
@CodeBlue:你应该习惯这一点:几乎所有的情况下,Unix的敏感
enzotib

好的,谢谢@enzotib。我来自Windows背景。
CodeBlue 2012年

它也可以与egrep(我使用的)一起使用,而不是grep -E更规范。
Arcege 2012年

3

你应该用

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

其中\|序列表示替代,而定界符\(\)用于分组。


是的,这也可行,尽管这让我有些困惑。谢谢。
CodeBlue 2012年


1

用不同于已经说过的方式回答...

您还可以通过-e多次指定选项来指定grep的多个匹配项

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

如果您使用问题中的文字而不是自己编写示例来编写答案,那将是很好的。
G-Man说'恢复莫妮卡''18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.