提取单词前面的数字

提取单词前面的数字

假设我有一个程序输出多行,其中一些包含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)仅当以下情况时才匹配“消息”如下 (=积极的前瞻)。

相关内容