Regex grep表示两个单词后的值

Regex grep表示两个单词后的值,regex,bash,grep,Regex,Bash,Grep,在一个文件中有重复的行,如 value for = 0.658 value b = 0.431 value ty = 0.001 该行以值开始。我只想grep行(0.658)的值中的数字,并且前面总是=。问题是=也在文件的其他行前面。我知道如何grep两个单词的行value和for,但不知道如何grep数字?您可以尝试以下方法: grep -oP 'value for = \K.*' filename 输出: 0.658 请参阅:默认情况下,如果您有匹配项,grep将打印整行(请参阅“”)

在一个文件中有重复的行,如

value for = 0.658
value b = 0.431
value ty = 0.001
该行以
值开始。我只想grep
行(0.658)的
值中的数字,并且前面总是
=
。问题是
=
也在文件的其他行前面。我知道如何grep两个单词的行
value
for
,但不知道如何grep数字?

您可以尝试以下方法:

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

0.658

请参阅:

默认情况下,如果您有匹配项,
grep
将打印整行(请参阅“”)

而-o选项将只输出与匹配的部分行。因此,要在带有数字的行上输出所有数字,我们可以执行以下操作:

grep -Eo '[0-9]+' filename
若要限制为包含“value for=”和数字的行,我们可以使用-p,并在表达式中使用\K放弃匹配的第一部分:

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

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

使用匹配数字的regexp。比如:

\d?\.?\d*
以下是一个正在运行的屏幕截图:

不需要初始cat。;)请注意,这使用两个非标准(非POSIX)选项来
grep
-o
仅打印匹配的数据,以及
-P
使用PCRE(与Perl兼容的正则表达式)。
-o
选项可在GNU
grep
和BSD(Mac OS X)
grep
中找到;
-P
选项仅在AFAIK的GNU
grep
中找到。
\d?\.?\d*