rob*_*rob 52 regex grep cygwin
我需要从单个文件返回两个不同匹配的结果.
grep "string1" my.file
Run Code Online (Sandbox Code Playgroud)
正确返回my.file中string1的单个实例
grep "string2" my.file
Run Code Online (Sandbox Code Playgroud)
正确返回my.file中string2的单个实例
但
grep "string1|string2" my.file
Run Code Online (Sandbox Code Playgroud)
没有回报
在正则表达式测试应用程序中语法是否正确,那么为什么它不能用于cygwin中的grep?
Xav*_*ica 77
使用|
字符而不在基本正则表达式中转义它只会匹配|
文字.例如,如果您有一个包含内容的文件
string1
string2
string1|string2
Run Code Online (Sandbox Code Playgroud)
使用grep "string1|string2" my.file
只会匹配最后一行
$ grep "string1|string2" my.file
string1|string2
Run Code Online (Sandbox Code Playgroud)
为了使用交替运算符|
,您可以:
使用基本正则表达式(just grep
)并转义|
正则表达式中的字符
grep "string1\|string2" my.file
使用扩展的正则表达式用egrep
或grep -E
,如朱利安已经指出他的回答
grep -E "string1|string2" my.file
如果要匹配两种不同的模式,还可以在-e
选项中单独指定它们:
grep -e "string1" -e "string2" my.file
您可能会发现该grep
参考的以下部分很有用:
-e
Jul*_*ian 10
您可能需要使用egrep
或grep -E
.管道OR符号是'extended'grep的一部分,基本的Cygwin grep可能不支持.
此外,您可能需要转义管道符号.