我对sed命令有一点疑问。例如,我有一个如下文件。
iptable.save
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
所以下次在向文件添加相同行之前,需要检查我们要输入的新行是否存在于文件中。如果存在,请不要执行任何操作,否则请在文件中输入新行。在此先感谢。
答案 0 :(得分:1)
我宁愿将grep
用于此目的:
if [ $(grep -cx "$line" iptables.save) -eq 0 ]; then
echo "$line" >> iptables.save # Append to the file
fi
-xc
表示我们想要计算与$line
完全相同的行数。
但如果你真的更喜欢使用sed
:
if [ $(sed -n '/^'"$line"'$/p' iptables.save | wc -l) -eq 0 ]; then
echo "$line" >> iptables.save # Append to the file
fi
答案 1 :(得分:0)
如果我理解正确,这是awk的工作:
awk -v line="$line" '$0==line{f=1} END{if (!f) print line}' file >> file
答案 2 :(得分:0)
这也可能有所帮助。例如,检查文件/ etc / ssh / sshd_config,如果文件未以空行结尾,则添加一个,如果文件以空行结尾,则不执行任何操作
if [[ $(tail -n 1 /etc/ssh/sshd_config) != "" ]]; then echo "" >> /etc/ssh/sshd_config; fi