如何使用`awk`打印正则表达式匹配?

时间:2011-03-28 23:58:58

标签: bash shell awk

有没有办法在shell中使用awk命令打印正则表达式匹配(但只有匹配的字符串)?

3 个答案:

答案 0 :(得分:43)

是的,在awk中使用match()函数并为其提供可选的数组参数(在我的示例中为a)。执行此操作时,第0个元素将是与正则表达式匹配的部分

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

答案 1 :(得分:21)

解决方案的awk特定(而不是gawk)实施方案:

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

答案 2 :(得分:1)

我使用这个构造了很多:

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