如何在 Cygwin 中的 grep 中使用正则表达式 OR?
我需要从单个文件返回两个不同匹配的结果。
grep "string1" my.file
正确返回 my.file 中 string1 的单个实例
grep "string2" my.file
正确返回 my.file 中 string2 的单个实例
,但
grep "string1|string2" my.file
在语法正确的正则表达式测试应用程序中不返回任何内容
,那么为什么它不适用于 cygwin 中的 grep ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在基本正则表达式中使用
|
字符而不对其进行转义将仅匹配|
文字。例如,如果您有一个包含内容的文件,则使用
grep "string1|string2" my.file
将仅匹配最后一行为了使用交替运算符
|
,您可以:使用基本正则表达式(只需
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
Using the
|
character without escaping it in a basic regular expression will only match the|
literal. For instance, if you have a file with contentsUsing
grep "string1|string2" my.file
will only match the last lineIn order to use the alternation operator
|
, you could:Use a basic regular expression (just
grep
) and escape the|
character in the regular expressiongrep "string1\|string2" my.file
Use an extended regular expression with
egrep
orgrep -E
, as Julian already pointed out in his answergrep -E "string1|string2" my.file
If it is two different patterns that you want to match, you could also specify them separately in
-e
options:grep -e "string1" -e "string2" my.file
You might find the following sections of the
grep
reference useful:-e
您可能需要使用
egrep
或grep -E
。管道 OR 符号是“扩展”grep 的一部分,基本 Cygwin grep 可能不支持。另外,您可能需要转义管道符号。
You may need to either use
egrep
orgrep -E
. The pipe OR symbol is part of 'extended' grep and may not be supported by the basic Cygwin grep.Also, you probably need to escape the pipe symbol.
我发现的最好、最清晰的方法是:
grep -e REG1 -e REG2 -e REG3 _FILETOGREP_
我从不使用管道,因为它不太明显并且很难开始工作。
The best and most clear way I've found is:
grep -e REG1 -e REG2 -e REG3 _FILETOGREP_
I never use pipe as it's less evident and very awkward to get working.
您可以通过阅读精美手册来找到此信息:grep(1),您可以通过运行“man grep”找到该手册。它描述了 grep 和 egrep 之间的区别,以及基本表达式和正则表达式,以及有关 grep 的许多其他有用信息。
You can find this information by reading the fine manual: grep(1), which you can find by running 'man grep'. It describes the difference between grep and egrep, and basic and regular expressions, along with a lot of other useful information about grep.
grep -P
参加这个聚会迟到了,但其他答案都不适合我。 (我正在寻找 \d 数字。)这有效:
来自 grep --help:
grep -P
Late to this party, but none of the other answers worked for me. (I was grepping for \d digits.) This worked:
From grep --help: