grep两个单词后的值

时间:2014-10-25 18:16:58

标签: bash grep

在文件中有重复的行,如

value for = 0.658
value b = 0.431
value ty = 0.001

该行以value开头。我只想在value for行(0.658)中查找数字,并且前面总是有=。问题是=也位于文件的其他行之前。我知道如何为两个单词valuefor中的一行说话,但不知道如何仅仅使用这个数字?

4 个答案:

答案 0 :(得分:2)

你可以试试这个:

grep -oP 'value for = \K.*' filename

输出:

0.658

请参阅:http://www.charlestonsw.com/perl-regular-expression-k-trick/

答案 1 :(得分:0)

默认情况下,如果您匹配,grep将打印整行(请参阅' man grep')。

-o选项将仅输出与regex匹配的部分行。因此,要输出带有数字的行上的所有数字,我们可以这样做:

grep -Eo '[0-9]+' filename

限制为具有'值的行'和一个数字我们可以使用Perl regex( - P)并在我们的表达式中使用\ K来丢弃匹配的第一部分:

grep -Po 'value for \= \K[0-9]+' filename

答案 2 :(得分:0)

grep "value for" YOURFILE | grep -Po '([\[0-9\]\.]+)'

第一个grep确保只有必要的行传递给第二个,只输出匹配的部分(由于-o开关)。

答案 3 :(得分:0)

使用与数字匹配的正则表达式。类似的东西:

\d?\.?\d*

以下是regexpal的屏幕截图: enter image description here