【发布时间】:2013-12-05 04:58:02
【问题描述】:
我遇到了一些困难(对我来说)。我试图在我们的服务器构建过程中(使用 kickstart 安装后脚本)在 RHEL5 /etc/sysconfig/iptables 文件中插入两个换行符。
具体的sed命令是:
${SED} -i "/-i lo/ a\
\n\n#Trusted Traffic\n-A INPUT -s 10.153.156.0/25,10.153.174.160/27 -d ${MGTIP} -m state --state NEW -j ACCEPT\n\n#Remote Access\n-A INPUT -s 10.120.80.0/21,10.152.80.0/21,10.153.193.0/24,172.18.1.0/24,${MGTNET}/${NUMBITS} -d ${MGTIP} -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT\n\n#Backups\n-A INPUT -s 10.153.147.192/26 -d ${BKPIP} -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT\n\n" ${IPTABLES}
这实际上是更大脚本的一部分。 ${SED} 和 ${IPTABLES} 已设置为必要的值。
除前两个换行符外,所有换行符都有效。或者,更准确地说,是前两个中的第二个。即使是 ACCEPT 之后的最后两个换行符也有效。前两个换行符发生的情况是第一个有效,在匹配包含-i lo 的 iptables 条目后创建一个换行符。然而,第二个只是在 #Trusted Traffic 文本之前插入一个文字“n”。
它最终看起来像
(snip)
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
n#Trusted Traffic
-A INPUT (snip)
我尝试了各种方法来确保插入第二个换行符。我使用了两个空行而不是\n\n。我在不同的行上使用了两个换行符,我使用了\\n\\n。到目前为止,我尝试过的所有结果都相同:插入文字 'n' 而不是第二个换行符。
sed 是否不能在附加文本的开头使用两个换行符?有没有办法让我完全不知道这项工作?
【问题讨论】: