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 不匹配正则表达式的主要内容,如果未能解决你的问题,请参考以下文章