在使用SED命令添加之前,检查文件中是否存在新行

时间:2014-07-26 08:49:03

标签: linux shell sed duplicates

我对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

所以下次在向文件添加相同行之前,需要检查我们要输入的新行是否存在于文件中。如果存在,请不要执行任何操作,否则请在文件中输入新行。在此先感谢。

3 个答案:

答案 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