【发布时间】:2011-07-24 21:31:44
【问题描述】:
有没有办法在 shell 中使用awk 命令打印正则表达式匹配(但仅匹配字符串)?
【问题讨论】:
有没有办法在 shell 中使用awk 命令打印正则表达式匹配(但仅匹配字符串)?
【问题讨论】:
是的,在awk 中使用match() 函数并为其提供可选的数组参数(在我的示例中为a)。当你这样做时,第 0 个元素将是匹配正则表达式的部分
$ echo "blah foo123bar blah" | awk '{match($2,"[a-z]+[0-9]+",a)}END{print a[0]}'
foo123
【讨论】:
解决方案的特定于awk(而不是使用gawk)的实现:
$ echo "blah foo123bar blah" | awk 'match($0,/[a-z]+[0-9]+/) {print substr($0,RSTART,RLENGTH)}'
foo123
【讨论】:
我经常使用这种结构:
split(substr($0, match($0, /[0-9]+ [Bb]ytes/)), a, " ");
print a[1];
【讨论】: