我需要从单个文件返回两个不同匹配的结果。
grep "string1" my.file
正确返回my.file
中string1的单个实例grep "string2" my.file
正确返回my.file
中string2的单个实例但
grep "string1|string2" my.file
什么都不返回
在正则表达式测试应用程序中语法是否正确,那为什么它不能用于cygwin中的grep?
答案 0 :(得分:75)
使用|
字符而不在基本正则表达式中转义它只会匹配|
字面值。例如,如果您有一个包含内容的文件
string1
string2
string1|string2
使用grep "string1|string2" my.file
只会匹配最后一行
$ grep "string1|string2" my.file
string1|string2
为了使用交替运算符|
,您可以:
使用基本正则表达式(仅grep
)并转义正则表达式中的|
字符
grep "string1\|string2" my.file
使用egrep
或grep -E
的扩展正则表达式,正如Julian已在his answer
grep -E "string1|string2" my.file
如果您要匹配两种不同的模式,您还可以在-e
选项中单独指定它们:
grep -e "string1" -e "string2" my.file
您可能会发现grep
参考的以下部分很有用:
答案 1 :(得分:9)
您可能需要使用egrep
或grep -E
。管道OR符号是'extended'grep的一部分,基本的Cygwin grep可能不支持。
此外,您可能需要转义管道符号。
答案 2 :(得分:6)
我发现的最好和最清晰的方法是: grep -e REG1 -e REG2 -e REG3 _FILETOGREP _
我从不使用烟斗,因为它不那么明显,也很难开始工作。
答案 3 :(得分:0)
您可以通过阅读精细手册:grep(1)找到这些信息,您可以通过运行'man grep'找到它。它描述了grep和egrep之间的区别,基本和正则表达式,以及关于grep的许多其他有用信息。