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

ton*_*ton 0 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
Run Code Online (Sandbox Code Playgroud)

我可以通过正则表达式搜索

$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; /[a]{2}/ {print $0};'
aa,bb,cc
dd,eaae,ff
Run Code Online (Sandbox Code Playgroud)

我可以强制awk将regexp搜索应用于特定字段吗?我正在寻找类似的东西

$ echo -e "aa,bb,cc\ndd,eaae,ff" | awk 'BEGIN{FS=",";}; $2==/[a]{2}/ {print $0};'
Run Code Online (Sandbox Code Playgroud)

期待结果:

dd,eaae,ff
Run Code Online (Sandbox Code Playgroud)

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

接受的响应 - 运算符"〜"(感谢hek2mgl):

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

hek*_*mgl 5

您可以使用 :

$2 ~ /REGEX/ {ACTION}
Run Code Online (Sandbox Code Playgroud)

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


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

awk -F, '$2 ~ /^[a]{2}$/' <<< "aa,bb,cc\ndd,eaae,ff"
Run Code Online (Sandbox Code Playgroud)

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