如何在awk脚本中移动grep?
下面有我想用awk的grep替换的i3如何在awk脚本中移动grep?,awk,Awk,下面有我想用awk的grep替换的i3grep命令。所以我试过了 ! /000000000000/; ! /000000000000/ $0; ! /000000000000/ $3; 在这里我没有得到一个错误,但是使用下面的脚本和 $ echo 000000000000 | awk '{ ! /000000000000/; print }' 000000000000 它没有像预期的那样跳过这些行 问题 有人能解释为什么我的“非grep”在awk中不起作用吗 grep -v '^#' $ho
grep
命令。所以我试过了
! /000000000000/;
! /000000000000/ $0;
! /000000000000/ $3;
在这里我没有得到一个错误,但是使用下面的脚本和
$ echo 000000000000 | awk '{ ! /000000000000/; print }'
000000000000
它没有像预期的那样跳过这些行
问题
有人能解释为什么我的“非grep”在awk
中不起作用吗
grep -v '^#' $hosts | grep -E '[0-9A-F]{12}\b' | grep -v 000000000000 | awk '{
print "host "$5" {"
print " option host-name \""$5"\";"
gsub(/..\B/,"&:", $3)
print " hardware ethernet "$3";"
print " fixed-address "$1";"
print "}"
print ""
}' > /etc/dhcp/reservations.conf
请尝试将代码更改为:
echo 000000000000 | awk '!/000000000000/'
尝试中出现问题:$echo 000000000000|awk'{!/000000000000/;print}'
,因为您正在检查条件/000000000000/
具有代码>在它之后,以便条件正常工作,并且不打印任何内容。但是在它后面有print
,它不是在那种情况下出现的,所以它只是打印那一行
awk
适用于模式{action}
如果在两者之间放置分号,则表示条件在它前面结束,语句在后面结束
是awk
的一个新语句
编辑:通过在此处查看OP的尝试添加可能的解决方案,因为OP没有显示任何样本,所以根本没有测试。此外,我正在使用--re interval
,因为我的awk
版本是旧版本,如果您的框中有新版本的awk
,则可以删除
awk --re-interval '!/^#/ && !/000000000000/ && /[0-9A-Fa-f]{12}/{
print "host "$5" {"
print " option host-name \""$5"\";"
gsub(/..\B/,"&:", $3)
print " hardware ethernet "$3";"
print " fixed-address "$1";"
print "}"
print ""
}' "$host" > /etc/dhcp/reservations.conf
查看您的代码:
$ echo 000000000000 | awk '
{
! /000000000000/ # on given input this evaluates to false
# but since its in action, affects nothing
print # this prints the record regardless of whatever happened above
}'
添加打印
可以帮助您了解:
$ echo 000000000000 | awk '{ print ! /000000000000/; print }'
0
000000000000
删除代码>:
$ echo 000000000000 | awk '{ print /000000000000/; print }'
1
000000000000
这是我能帮你的全部,因为没有足够的信息来提供更多信息 是否仅当线条与该图案不匹配时才打印线条?如果是这样,您需要/废话/{print}
。注意模式在动作块之外。@Sandra Schlichting,您不需要将多个grep
与awk
一起使用。很好,你在帖子中展示了你的尝试。如果您可以简单地发布输入样本和预期输出样本,那么我们也可以在单个awk
中发布。@Sandra Schlichting,如果看不到您的reservations.conf
文件,除了我以前的评论之外,很难判断哪些内容不起作用。我显然希望awk
的工作方式与grep
类似,如果searhed不匹配,则转到下一个输入行。关于模式{action}
我确实尝试了/something/{next}
,正如这篇博文所示。为什么这样不行@SandraSchlichting,所以如果您不需要打印具有000000000000
的行,那么您可以执行/000000000000/{next}
或/000000000000/
两者都应该可以工作。但是如果你这样做了/000000000000/{next}
这将打印000000000000000000
行,如果我在这里向您阐明我的观点,请告诉我?