関連する質問がいくつかありますが、awk
問題を解決するために使用できないようです。
echo "blah foo123bar234blah" | egrep -o '([0-9]+)'
返品
123
234
しかし、
echo "blah foo123bar234blah" |
awk '{ match($0,/([0-9]+)/,m); print m[0], m[1],m[2]}'
123 123
合計を返します。
echo "blah foo123bar234blah" |
awk '{ match($0,/([0-9]+).+([0-9]+)/,m); print m[0], m[1],m[2]}'
返品 123bar234 123 4
存在する手動、セクションで:一致(文字列、正規表現[、配列])、例は次のとおりです。
echo foooobazbarrrrr |
gawk '{ match($0, /(fo+).+(bar*)/, arr); print arr[1], arr[2]}'
返品foooo barrrrr
。
それでは、awk(と同じ)を使用してgrep -o
文字列から複数の数字をどのように抽出しますか?
ベストアンサー1
複数文字のRSとRTにGNU awkを使用する:
$ echo "blah foo123bar234blah" |
awk -v RS='[0-9]+' '$0=RT'
123
234
awkを使用してください(強力な一般的なアプローチではなく、単純な角括弧式を使用する方が簡単なので、否定するのではなく元の正規表現を維持してください)。
$ echo "blah foo123bar234blah" |
awk -v FS='\n' '{gsub(/[0-9]+/,FS"&"FS); for (i=2;i<=NF;i+=2) print $i}'
123
234
または:
$ echo "blah foo123bar234blah" |
awk '{ while (match($0,/[0-9]+/) ) {print substr($0,RSTART,RLENGTH); $0=substr($0,RSTART+RLENGTH)} }'
123
234