AWK 中的逆正则表达式?

Ven*_*eki 8 awk regular-expression

我试图过滤掉包含特定单词的行。正则表达式是脚本的命令行输入。

$0 ~ regex {
//Do something.
}
Run Code Online (Sandbox Code Playgroud)

样本输入是:

**String** **number**
domain  1
domain  2
bla     3
Run Code Online (Sandbox Code Playgroud)

因此,从上面的输入中,用户可以说 - 过滤掉包含“域”一词的行。

我试过的:

regex = "\?\\!domain" 
Run Code Online (Sandbox Code Playgroud)

(负前瞻)。

但是这个正则表达式过滤掉了每一行。不仅仅是带有“域”一词的行。

Dop*_*oti 12

对于input包含以下内容的给定输入文件:

domain
demesne
Run Code Online (Sandbox Code Playgroud)

过滤包含 的行domain

$ awk '/domain/ { print }' input
domain
Run Code Online (Sandbox Code Playgroud)

过滤包含的行domain

$ awk '!/domain/ {print }' input
demesne
Run Code Online (Sandbox Code Playgroud)

对于基于字段而不是整行的过滤,我们可以对新的给定input文件尝试以下操作:

example www.example.com
exemplar www.example.net
Run Code Online (Sandbox Code Playgroud)

过滤掉第一个字段包含的行 example

$ awk '$1 !~ /example/ { print }' input
exemplar www.example.net
Run Code Online (Sandbox Code Playgroud)

在您的问题中,您使用的$0是整行而不是第一个字段。