如何使用grep/sed提取子字符串和数字

Hoo*_*voo 5 regex linux bash sed

我有一个包含文本和数字的文本文件,我想使用grep只提取我需要的数字,例如,给定一个文件如下:

miss rate 0.21  
ipc 222  
stalls n shdmem 112
Run Code Online (Sandbox Code Playgroud)

所以说,我只是想提取的数据miss rate0.21.我如何用grep或sed做到这一点?另外,我需要不止一个号码,而不仅仅是后一个号码miss rate.也就是说,我可能要同时获得0.21112.示例输出可能如下所示:

0.21 222 112
Run Code Online (Sandbox Code Playgroud)

因为我需要以后绘图的数据.

tha*_*guy 5

使用awk来代替:

awk '/^miss rate/ { print $3 }' yourfile
Run Code Online (Sandbox Code Playgroud)

要仅使用 grep 来完成此操作,您需要使用 PCRE (-P) 和正向后视 (?<=..) 并仅匹配 (-o) 的非标准扩展,例如此处与 GNU grep 一起使用:

grep -Po '(?<=miss rate ).*' yourfile
Run Code Online (Sandbox Code Playgroud)


Dan*_*neJ 5

如果您真的只想使用grep,则可以尝试:

grep "miss rate" file | grep -oe '\([0-9.]*\)'
Run Code Online (Sandbox Code Playgroud)

它将首先找到匹配的行,然后仅输出数字。

不过,Sed可能更具可读性:

sed -n 's#miss rate ##p' file
Run Code Online (Sandbox Code Playgroud)