带有变量和否定的 Awk 多个搜索词

Awk multiple search terms with a variable and negation

我有一个小测试文件包含:

awk this   
and not awk this  
but awk this  
so do awk this  

我在 bash 中尝试了以下 awk 命令,但每个命令都没有输出:

f=awk; awk '/$f/ && !/not/' test.txt
f=awk; awk '/$f/ && !/not/' test.txt
f=awk; awk '/"$f"/ && !/not/' test.txt
f=awk; awk -v f="$f" '/f/ && !/not/' gtest.txt

由于 !.

,使用双引号 " 在 shell 中产生 "event not found" 错误

如何在同一命令中搜索变量并取反另一个字符串?

像这样使用awk

f='awk'

awk -v f="$f" -v n='not' '[=10=] ~ f && [=10=] !~ n' file
awk this
but awk this
so do awk this

或者如果您不想将 n='not' 传递给 awk

awk -v f="$f" '[=11=] ~ f && [=11=] !~ /not/' file

awk this
but awk this
so do awk this

awk 指向我的 gawk,下面的工作正常:

awk -vf=awk '[=10=] ~ f && !/not/' file