【问题标题】:Grep not matching regular expressionGrep 不匹配正则表达式
【发布时间】:2017-02-09 04:16:53
【问题描述】:

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

给定以下输入文件的内容

{"foo":29, "bar":30}

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

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

【问题讨论】:

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

标签: regex grep


【解决方案1】:

你可以试试这个;

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

【讨论】:

    【解决方案2】:

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

    grep -oe 'pat' file
    

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

    egrep -o 'pat' file
    

    【讨论】:

    • 这不起作用(因为-e),但另一条评论指出-E 有效。
    • -E 是扩展正则表达式,而 -e 只是正则表达式。我的错!
    • 没问题,谢谢帮助! :) egrep 也可以
    猜你喜欢
    • 2013-10-08
    • 2011-08-05
    • 2015-07-02
    • 2011-01-08
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多