我已经打了一个傻瓜(对我来说)。我在服务器构建过程中尝试在RHEL5 / etc / sysconfig / iptables文件中插入两个换行符(使用kickstart安装后脚本)。
具体的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是否在附加文本的开头不能使用两个换行符?是否有办法使这项工作完全不知道?
答案 0 :(得分:1)
有趣的是,我原以为你尝试过的解决方案之一会起作用,但我看到了同样的行为。这是一个可能的解决方案:
${SED} -i -e "s/-i lo.*/\0\n\n/" -e "// a\
#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}
首先将两个换行符附加到上一行的末尾,然后执行追加操作。
答案 1 :(得分:1)
我不明白为什么它也不起作用,但你也可以用替代选项而不是追加来做到这一点:
${SED} -i "s%-i lo.*%&\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}
答案 2 :(得分:0)
不确定可移植性,但请尝试:
${SED} '/-i lo/ a\
\
\
'"#Trusted Traffic\\
-A INPUT -s 10.153.156...
"
这种技术适用于BSD sed。您可以在整个过程中保持双引号:
${SED} "/-i lo/ a\\
\\
\\
#Trusted Traffic\\
-A INPUT -s 10.153.156...
"
在任何一种情况下,反斜杠和行尾都必须没有空格。