我想在比赛结束后在一组括号内grep数字。比赛结束后的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数字。比赛结束后的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 -o -P '(?<=bar: ")\d+.\d+(?=")'
另一种是使用SED:
sed -e 's/.*bar: "\([[:digit:]]\+.[[:digit:]]\+\)".*/\1/'
你可以使用下面的grep也
$ echo 'foo: "32.1" bar: "42.0" misc: "52.3"' | grep -oP 'bar:\s+"\K[^"]*(?=")'
42.0
+1我试图让'\ K'工作但不断失败并放弃。 – 2014-10-08 03:53:45
太棒了!我不知道这些。 :-) 有关Perl中的超前和隐藏断言的更多信息,请访问:http://www.perlmonks.org/?node_id=518444 – EarthIsHome 2014-10-08 03:47:44