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 rate是0.21.我如何用grep或sed做到这一点?另外,我需要不止一个号码,而不仅仅是后一个号码miss rate.也就是说,我可能要同时获得0.21和112.示例输出可能如下所示:
0.21 222 112
Run Code Online (Sandbox Code Playgroud)
因为我需要以后绘图的数据.
使用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)
如果您真的只想使用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)