$ echo -e "hey\nthis\nworld" | nawk '{ if ( $1 !~ /e/ ) { print $0; } else if ($1 !~ /o/ ) { print $0; } else { print "condition not mached"; } }'
hey
this
world
$
我更喜欢将它放在一行上,但也试过多行,如各种例子所示:
$ echo -e "hey\nthis\nworld" | nawk '{
if ( $1 !~ /e/ )
print $0;
else if ($1 !~ /o/ )
print $0;
else
print "condition not matched"
}'
hey
this
world
$
提前感谢帮助一个新手!
我只想让只有不含某种图案的印刷线条在这里" e"或" o"。 最后的其他我只是为测试目的添加。
答案 0 :(得分:0)
只需执行以下操作即可让您的生活更轻松:
echo "hey\nthis\nworld" | nawk '$1 !~ /e|o/'
你的情况出了什么问题:
$ echo -e "hey\nthis\nworld" | nawk '{
if ( $1 !~ /e/ ) #'this' and 'world' satisfy this condition and so are printed
print $0;
else if ($1 !~ /o/ ) #Only 'hey' falls through to this test and passes and prints
print $0;
else
print "condition not matched"
}'
hey
this
world
$
答案 1 :(得分:0)
FWIW正确的方法是使用三元表达式中的字符列表:
awk '{ print ($1 ~ /[eo]/ ? $0 : "condition not matched") }'
如果您使用awk
标记问题而不仅仅是nawk
(这是一个旧的,非POSIX和相对多余的awk变体),那么它们将会覆盖更广泛的受众。