単語の前の数字を抽出します。

単語の前の数字を抽出します。

messages複数行を出力するプログラムがあり、その中には数字の前に単語が含まれているとします。どうすればこの数だけ抽出できますか? (合計のみを出力するにはどうすればよいですか?)

答え1

を使用し、awk数字と間にオプションのスペースがある10進整数であるとします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)次の場合にのみ一致します。「情報」次のように(=肯定的な見通し)。

関連情報