我有一些文件可能看起来像mem = 500
,mem= 100
,mem =256
,或mem
,空格,=
和数字的任意组合。如果我假设没有空格我可以使用:
grep -oP '(?<=mem=)[0-9]+'
但如何更改此设置以允许mem
和=
之间的空格?请记住,我想要在这里使用grep。
答案 0 :(得分:4)
尝试
grep -oP 'mem\s*=\s*\K[0-9]+' file
\K
只会丢弃到目前为止匹配的所有内容,只打印数字。
这个替代后面的断言(例如(?<=mem=)
)绕过后者Tomalak提到的限制:后视断言必须修复 -length。强>
注意:非标准-P
选项 - 对于PCRE(Perl兼容正则表达式)支持 - 需要 GNU grep
。
答案 1 :(得分:0)
你可以这样做两个grep
来电:
grep -oP 'mem *= *[0-9]+' | grep -oP '[0-9]+'
答案 2 :(得分:0)
如果您没有GNU grep,则需要Perl,awk,sed等。
Perl解决方案:
perl -lne 'print $1 if m/mem\s*=\s*(\d+)/;'
并且sed:
sed -n 's/.*\mem *= *\([0-9]*\).*/\1/p'
AWK:
awk -F'mem *= *' '{print $2}'
答案 3 :(得分:0)
以下是awk
版本:
awk -F" *= *" '{print $2}' file
500
100
256
如果还有其他行且您只需要mem
,请执行:
awk -F" *= *" '/mem/{print $2}' file
500
100
256