【问题标题】:Grep digits after match匹配后的Grep数字
【发布时间】:2014-10-08 11:39:40
【问题描述】:

我想在匹配后对一组括号内的数字进行 grep。

在下面给出foo.txt

foo: "32.1" bar: "42.0" misc: "52.3"

我想提取小节后面的数字,42.0

以下行将匹配,但我想提取数字。我想我可以将输出返回到 grep 中寻找 \d+.\d+,但有更好的方法吗?

grep -o -P 'bar: "\d+.\d+"' foo.txt

【问题讨论】:

    标签: grep


    【解决方案1】:

    一种方法是使用前瞻和后瞻断言:

    grep -o -P '(?<=bar: ")\d+.\d+(?=")'
    

    另一种是使用sed:

    sed -e 's/.*bar: "\([[:digit:]]\+.[[:digit:]]\+\)".*/\1/'
    

    【讨论】:

    • 太棒了!我不知道那些。 :-) 关于 Perl 中的前瞻和后瞻断言的更多信息可以在这里找到:perlmonks.org/?node_id=518444
    【解决方案2】:

    你也可以使用下面的 grep,

    $ echo 'foo: "32.1" bar: "42.0" misc: "52.3"' | grep -oP 'bar:\s+"\K[^"]*(?=")'
    42.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2014-11-06
      • 2014-09-07
      • 1970-01-01
      • 2014-10-20
      • 2015-07-17
      • 1970-01-01
      • 2015-08-17
      相关资源
      最近更新 更多