如何在Cygwin的grep中使用regex OR?

dced5bon  于 11个月前  发布在  其他
关注(0)|答案(5)|浏览(131)

我需要从一个文件返回两个不同匹配的结果。

grep "string1" my.file

字符串
正确返回我的.file中string1的单个示例

grep "string2" my.file


正确返回my.file中string2的单个示例

grep "string1|string2" my.file


返回nothing
在正则表达式测试应用程序中,语法是正确,那么为什么它不适用于cygwin中的grep呢?

ogq8wdun

ogq8wdun1#

在基本正则表达式中使用|字符而不对其进行转义,将只匹配|文字。

string1
string2
string1|string2

字符串
使用grep "string1|string2" my.file将只匹配最后一行

$ grep "string1|string2" my.file
string1|string2


为了使用交替运算符|,你可以:
1.使用基本正则表达式(仅grep)并转义正则表达式中的|字符
grep "string1\|string2" my.file
1.使用egrepgrep -E的扩展正则表达式,正如Julian在his answer中指出的那样
grep -E "string1|string2" my.file
1.如果您想要匹配两个不同的模式,您也可以在-e选项中分别指定它们:
grep -e "string1" -e "string2" my.file
您可能会发现grep参考的以下部分很有用:

  • 基本正则表达式和扩展正则表达式
  • 匹配控件,其中解释了-e
bvn4nwqk

bvn4nwqk2#

您可能需要使用egrepgrep -E。管道OR符号是“扩展”grep的一部分,可能不受基本Cygwin grep支持。
此外,您可能需要转义管道符号。

ss2ws0br

ss2ws0br3#

我发现的最好和最清晰的方法是:grep -e * REG 1 * -e * REG 2 * -e * REG 3 * FILETOGREP
我从不使用管道,因为它不太明显,而且工作起来很尴尬。

ijnw1ujt

ijnw1ujt4#

你可以通过阅读grep(1)来找到这些信息,你可以通过运行“man grep”来找到它。它描述了grep和egrep之间的区别,以及基本表达式和正则表达式,沿着了很多关于grep的有用信息。

23c0lvtd

23c0lvtd5#

grep -P

参加这个聚会迟到了,但是其他的答案对我都不起作用。(我正在寻找\d个数字。)这个起作用了:

grep -P "string1|string2" my.file

字符串
grep --help:

-P, --perl-regexp         PATTERNS are Perl regular expressions

相关问题