【发布时间】:2019-12-28 21:53:28
【问题描述】:
文件 /var/cpanel/mainip 包含我服务器的主 IP,仅此而已。 文件 /etc/csf/csf.blocklists 包含防火墙阻止列表的列表,文件的一部分包含带有示例 IP 地址 1.2.3.4 的行
通常在新服务器上安装 CSF 防火墙软件时,我会手动将示例 IP 地址替换为服务器的主 IP 地址。这是成功从某些提供商处获取防火墙阻止列表所必需的。 为了简化设置过程,我需要一个命令,将示例 IP 地址 1.2.3.4 替换为我的主服务器 IP,这样我就不必手动执行了。
我尝试了一个 sed 命令,我想我已经接近正确的命令了,但还没有完全到位。请问你能帮忙吗?
sed -i '/1.2.3.4/ { r /etc/csf/csf.blocklists }' /var/cpanel/mainip
此代码不正确,因为它输出错误:
sed: -e 表达式#1, char 0: 不匹配的`{'
成功后,应将 1.2.3.4 替换为实际服务器 IP 地址。
【问题讨论】:
-
在
}之前插入换行符或删除无用的{和}。 -
a,i,c,r,R,w和W命令都要求以换行符结尾。由于您的地址/1.2.3.4/后面只有一个命令,即r file,因此不需要用括号括起来。如果有第二个命令附加到同一地址,则需要括号,但也需要两个命令字符串,例如如果要删除虚拟地址行sed -e '/1.2.3.4/{r file' -e 'd}' file。 -
我认为
sed -i '/1.2.3.4/ { r /etc/csf/csf.blocklists ; }' /var/cpanel/mainip也可能有效。注意;在关闭}之前。但我最喜欢下面的 Mihir 解决方案。我认为您修改后的文件仍将包含1.2.3.4。祝您好运。