使用变量和否定awk多个搜索项

时间:2017-03-15 15:48:39

标签: bash variables awk negate

我有一个包含以下内容的测试文件:

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错误。

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

2 个答案:

答案 0 :(得分:2)

像这样使用awk

f='awk'

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

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

awk -v f="$f" '$0 ~ f && $0 !~ /not/' file

awk this
but awk this
so do awk this

答案 1 :(得分:0)

对我来说,awk指向gawk并且以下工作正常:

awk -vf=awk '$0 ~ f && !/not/' file