Regex awk线不匹配
使用Regex awk线不匹配,regex,bash,awk,Regex,Bash,Awk,使用AWK,我需要避免在特定字段中打印带有特定单词的行。。。 在有人调用它是重复的之前,我做了搜索,发现了这个:,但我认为它是另一个上下文,因为这里我需要在特定列中匹配 鉴于数据: ABC ABC DEF AAA GHI ABC 我想过滤,只打印第一个字段(第2行和第3行)中不包含ABC的全文 作为第一次尝试,我尝试了(?!…),希望通过这种方式返回DEF和GHI: echo -e "ABC\tABC\nDEF\tAAA\nGHI\tABC" | awk '$1
AWK
,我需要避免在特定字段中打印带有特定单词的行。。。
在有人调用它是重复的之前,我做了搜索,发现了这个:,但我认为它是另一个上下文,因为这里我需要在特定列中匹配
鉴于数据:
ABC ABC
DEF AAA
GHI ABC
我想过滤,只打印第一个字段(第2行和第3行)中不包含ABC的全文
作为第一次尝试,我尝试了(?!…)
,希望通过这种方式返回DEF
和GHI
:
echo -e "ABC\tABC\nDEF\tAAA\nGHI\tABC" | awk '$1 ~ /(?!ABC)/ {print}'
但什么也不归还
第二次尝试。。。在表达式!/…之前使用not/代码>:
~$ echo -e "ABC\tABC\nDEF\tAAA\nGHI\tABC" | awk '$1 ~ !/ABC/ {print}'
什么也不归还
我不明白为什么
因此,另一次射击失败(正如这次预期的那样):
正如这次所料,第二个字段也被过滤了。因此,它似乎只适用于$0
然后我做了家庭作业,让它这样工作:
~$ echo -e "ABC\tABC\nDEF\tAAA\nGHI\tABC" | awk '{FL=$0;$0=$1}; !/ABC/ {print FL}; { $0=FL }'
DEF AAA
GHI ABC
无论如何,这对我来说似乎是一个解决办法,我有一种不好的感觉,我没有以正确的方式做
有人知道一个更好的方法,或者至少解释为什么第一次和第二次尝试不起作用?您可以使用以下习惯用法:
awk '$1 !~ /ABC/' file
如果第一个字段不包含ABC
,则打印该行。(匹配not运算符为!~
)。请注意,该命令仅包含一个条件,不包含print
操作。这可以工作,因为awk
中的默认操作是print
,因此不需要明确指定。此awk
应执行以下操作:
awk '!/^ABC/' file
DEF AAA
GHI ABC
它不会(!
)以ABC
开始(^
)打印行。谢谢,您的回答给了我另一种方式,请记录:echo-e“ABC\tABC\nDEF\tAAA\nGHI\tABC”| awk'!($1~/ABC/){print}'DEF AAA GHI ABC
就像我说的,在这种情况下可以省略{print}
。好的,在示例中我使用了第一个字段,但问题是关于任何字段的。
awk '!/^ABC/' file
DEF AAA
GHI ABC