Grep 不匹配正则表达式

Posted

技术标签:

【中文标题】Grep 不匹配正则表达式【英文标题】:Grep not matching regular expression 【发布时间】:2022-01-17 00:39:47 【问题描述】:

我正在努力从grep 获得匹配结果。

给定以下输入文件的内容

"foo":29, "bar":30

和下面的命令grep -o '"[^"]+":[0-9]+' input.txt,我期待两个匹配的结果。据我所知它支持正则表达式,但我不明白为什么grep 不返回任何结果?

正则表达式的其他实现工作正常 (https://regex101.com/r/RcONXk/1)。

【问题讨论】:

尝试在 grep 命令行中添加 -E -E 似乎有效,但 -e 无效。我想我必须阅读更多关于扩展正则表达式的内容:)。您可以将其发布为答案吗? -e 只是将正则表达式作为下一个参数。例如,当正则表达式可能以破折号开头时,它可以避免出现问题。或者它允许你有多个正则表达式。 【参考方案1】:

默认情况下,grep 不匹配正则表达式。要么使用 e 标志:

grep -oe 'pat' file

或使用 egrep(自动将模式视为正则表达式)。

egrep -o 'pat' file

【讨论】:

这不起作用(因为-e),但另一条评论指出-E 有效。 -E 是扩展正则表达式,而 -e 只是正则表达式。我的错! 没问题,谢谢帮助! :) egrep 也可以使用【参考方案2】:

你可以试试这个;

grep -oE '"[^"]+":[0-9]+'

例如:

user@host:/tmp$ echo '"foo":29, "bar":30' | grep -oE '"[^"]+":[0-9]+'
"foo":29
"bar":30

人 grep :

 -E, --extended-regexp
              Interpret PATTERN as an extended regular expression (ERE, see below).  (-E is specified by POSIX.)

Basic vs Extended Regular Expressions

【讨论】:

以上是关于Grep 不匹配正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

linux正则表达式

grep与正则表达式

正则表达式

Part 3 grep正则表达式

正则表达式与grep

正则表达式2——grep命令