web-dev-qa-db-ja.com

「awk」を使用して正規表現の一致を印刷するにはどうすればよいですか?

シェルでawkコマンドを使用して、正規表現の一致(ただし一致する文字列のみ)を出力する方法はありますか?

34
Istvan

はい、awkmatch()関数を使用し、オプションの配列パラメーター(この例ではa)を使用します。これを行うと、0番目の要素が正規表現に一致した部分になります

$ echo "blah foo123bar blah" | awk '{match($2,"[a-z]+[0-9]+",a)}END{print a[0]}'
foo123
44
SiegeX

awk固有の(gawkを使用するものとは対照的に)ソリューションの実装:

$ echo "blah foo123bar blah" | awk 'match($0,/[a-z]+[0-9]+/) {print substr($0,RSTART,RLENGTH)}'
foo123
22
Joshua Cook

私はこの構成をかなり使います:

split(substr($0, match($0, /[0-9]+ [Bb]ytes/)), a, " ");
print a[1];
2
nyet