假设我有一个程序输出多行,其中一些包含messages
前面带有数字的单词。我怎样才能只提取这些数字? (我怎样才能只输出它们的总和?)
答案1
使用awk
, 并假设这些是十进制整数,数字和 之间有可选的空格messages
:
cmd | awk '
match($0, /[[:digit:]]+[[:space:]]*messages/) {
sum += substr($0, RSTART)
}
END {print 0+sum}'
和perl
:
cmd | perl -lne '$s += $1 if /(\d+)\s*messages/; END{print 0+$s}'
答案2
使用grep
:
grep -Po "[0-9]+(?= messages)"
解释:
-P
:使用 perl 正则表达式 (PCRE)-o
:仅输出匹配项,而不输出匹配行。[0-9]+
匹配数字。(?= messages)
仅当以下情况时才匹配“消息”如下 (=积极的前瞻)。