我需要从一个文件返回两个不同匹配的结果。
grep "string1" my.file
字符串正确返回我的.file中string1的单个示例
grep "string2" my.file
型正确返回my.file中string2的单个示例但
grep "string1|string2" my.file
型返回nothing在正则表达式测试应用程序中,语法是正确,那么为什么它不适用于cygwin中的grep呢?
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.使用egrep或grep -E的扩展正则表达式,正如Julian在his answer中指出的那样grep -E "string1|string2" my.file个1.如果您想要匹配两个不同的模式,您也可以在-e选项中分别指定它们:grep -e "string1" -e "string2" my.file个您可能会发现grep参考的以下部分很有用:
grep
grep "string1\|string2" my.file
egrep
grep -E
grep -E "string1|string2" my.file
-e
grep -e "string1" -e "string2" my.file
bvn4nwqk2#
您可能需要使用egrep或grep -E。管道OR符号是“扩展”grep的一部分,可能不受基本Cygwin grep支持。此外,您可能需要转义管道符号。
ss2ws0br3#
我发现的最好和最清晰的方法是:grep -e * REG 1 * -e * REG 2 * -e * REG 3 * FILETOGREP我从不使用管道,因为它不太明显,而且工作起来很尴尬。
ijnw1ujt4#
你可以通过阅读grep(1)来找到这些信息,你可以通过运行“man grep”来找到它。它描述了grep和egrep之间的区别,以及基本表达式和正则表达式,沿着了很多关于grep的有用信息。
23c0lvtd5#
grep -P
参加这个聚会迟到了,但是其他的答案对我都不起作用。(我正在寻找\d个数字。)这个起作用了:
grep -P "string1|string2" my.file
字符串grep --help:
-P, --perl-regexp PATTERNS are Perl regular expressions
型
5条答案
按热度按时间ogq8wdun1#
在基本正则表达式中使用
|
字符而不对其进行转义,将只匹配|
文字。字符串
使用
grep "string1|string2" my.file
将只匹配最后一行型
为了使用交替运算符
|
,你可以:1.使用基本正则表达式(仅
grep
)并转义正则表达式中的|
字符grep "string1\|string2" my.file
个1.使用
egrep
或grep -E
的扩展正则表达式,正如Julian在his answer中指出的那样grep -E "string1|string2" my.file
个1.如果您想要匹配两个不同的模式,您也可以在
-e
选项中分别指定它们:grep -e "string1" -e "string2" my.file
个您可能会发现
grep
参考的以下部分很有用:-e
bvn4nwqk2#
您可能需要使用
egrep
或grep -E
。管道OR符号是“扩展”grep的一部分,可能不受基本Cygwin grep支持。此外,您可能需要转义管道符号。
ss2ws0br3#
我发现的最好和最清晰的方法是:grep -e * REG 1 * -e * REG 2 * -e * REG 3 * FILETOGREP
我从不使用管道,因为它不太明显,而且工作起来很尴尬。
ijnw1ujt4#
你可以通过阅读grep(1)来找到这些信息,你可以通过运行“man grep”来找到它。它描述了grep和egrep之间的区别,以及基本表达式和正则表达式,沿着了很多关于grep的有用信息。
23c0lvtd5#
grep -P
参加这个聚会迟到了,但是其他的答案对我都不起作用。(我正在寻找\d个数字。)这个起作用了:
字符串
grep --help:
型