使用grep允许正则表达式中的零个或多个空格

时间:2015-05-05 20:52:21

标签: regex grep

我有一些文件可能看起来像mem = 500mem= 100mem =256,或mem,空格,=和数字的任意组合。如果我假设没有空格我可以使用:

grep -oP '(?<=mem=)[0-9]+'

但如何更改此设置以允许mem=之间的空格?请记住,我想要在这里使用grep。

4 个答案:

答案 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