为什么这个命令中同时有printf和print呢?

为什么这个命令中同时有printf和print呢?

在学习时fail2ban我遇到了这个命令。我awk以前从未与 合作过,只与sed.我不明白为什么同时存在printfprint,那里:

awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

为什么两者都在那里?

顺便说一句,如果您知道,我邀请您在评论中分享 sed 版本。

答案1

第一种printf是将字符附加到由 表示的#输入文件的每一行,然后使用该子句将修改后的行(之前添加的行)打印到控制台。awk$0#print

您可以忽略其中一个并在命令行上运行它以查看哪个执行什么操作。

seq 1 5 | awk '{ printf "# "; print; }'
# 1
# 2
# 3
# 4
# 5

它也许可以简单地写成 with printfalone 或 just with printalone 作为

awk '{ printf "# %s\n" , $0  }'

您需要换行符,\n因为printf默认情况下不打印它。

awk '{ print "# "$0  }'

相关内容