使用awk在特定字段上搜索正则表达式

时间:2014-06-13 13:57:12

标签: regex bash awk

在awk中,我可以在字段中搜索以下值:

$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; $2=="eaae" {print $0};'
aa,bb,cc
dd,eaae,ff

我可以使用像

这样的正则表达式进行搜索
$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; /[a]{2}/ {print $0};'
aa,bb,cc
dd,eaae,ff

我可以强制awk将regexp搜索应用于特定字段吗?我正在寻找像

这样的东西
$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; $2==/[a]{2}/ {print $0};'

期待结果:

dd,eaae,ff

任何人都知道如何使用awk做到这一点?

接受的回应 - 运营商"〜" (感谢hek2mgl):

$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; $2 ~ /[a]{2}/ {print $0};'

1 个答案:

答案 0 :(得分:5)

您可以使用:

$2 ~ /REGEX/ {ACTION}

如果正则表达式仅应用于第二个字段(例如)。


在你的情况下,这将导致:

awk -F, '$2 ~ /^[a]{2}$/' <<< "aa,bb,cc\ndd,eaae,ff"

您可能想知道为什么我刚刚在awk程序中使用了正则表达式而没有print。这是因为您的操作是print $0 - 打印当前行 - 这是awk中的默认操作。