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)
次の場合にのみ一致します。「情報」次のように(=肯定的な見通し)。