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
选项可在GNUgrep
和BSD(Mac OS X)grep
中找到;-P
选项仅在AFAIK的GNUgrep
中找到。
\d?\.?\d*