2014-10-08 60 views
1

我想在比赛结束后在一组括号内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 

回答

3

的方法之一是使用向前看和向后看断言:

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

另一种是使用SED:

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

太棒了!我不知道这些。 :-) 有关Perl中的超前和隐藏断言的更多信息,请访问:http://www.perlmonks.org/?node_id=518444 – EarthIsHome 2014-10-08 03:47:44

1

你可以使用下面的grep也

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

+1我试图让'\ K'工作但不断失败并放弃。 – 2014-10-08 03:53:45