在Linux中,我运行以下命令
pmap -x $PID | tail -n 1
这会给我一个类似下面的行:
total kB 168194812 870692 852296
我正在尝试提取第二个数字(rss)以供使用。我在www.example.com中找到了此示例regex101.com:
/[^\d]*[\d]+[\s]+([\d]+)/
然而,当我尝试对我的文本行运行它时,我没有得到任何打印输出:
echo "total kB 168194812 870692 852296" | gawk 'match($0, /[^\d]*[\d]+[\s]+([\d]+)/, a) {print a[1]}'
我希望它能印出来
870692
4条答案
按热度按时间pgvzfuti1#
就像这样:
表达式
\d
是特定的Perl/PCRE兼容正则表达式。一些语言如Python也使用这个表达式。您可以简化为:
使用grep:
dba5bblo2#
如果只显示第4个字段,
以你为例
返回
t40tm48m3#
使用GNU
grep
和你展示的示例,请尝试以下grep
代码。以下是完整的Online regex demo正则表达式。说明:
grep
的-oP
选项,它们分别用于精确匹配和启用PCRE正则表达式风格。grep
程序中,我使用regex^total kB\s+\d+\s+\K\d+
,其中:total kB
,后跟空格、数字和空格。\K
选项来忘记到目前为止与正则表达式匹配的值,这将帮助我们获得所需的输出,尽管它与正则表达式匹配,但在输出打印中不考虑值。xggvc2p64#
如果要使用
awk
,可以将数字与[0-9]
和求反版本[^0-9]
匹配当您使用
tail -n 1
输出单行时,您也可以使用gnu awk
将行分隔符设置为1位或更多位数,并在行号为2时打印行终止符。输出量