使用一个文件的内容替换一个文件中的字符串的命令

时间:2019-08-23 14:46:03

标签: sed pipe sh cat

文件/ var / cpanel / mainip包含服务器的主IP,没有其他内容。 文件/etc/csf/csf.blocklists包含防火墙阻止列表的列表,文件的一部分包含一行IP地址为1.2.3.4的示例

通常,在新服务器上安装CSF防火墙软件时,我将用服务器的主IP地址手动替换示例IP地址。这是从某些提供商成功获取防火墙阻止列表所必需的。 为了简化设置过程,我想要一个命令,该命令将用主服务器IP替换示例IP地址1.2.3.4,因此无需手动进行操作。

我尝试了sed命令,我想我已经接近正确的命令,但还不完全正确。请您帮忙?

sed -i '/1.2.3.4/ { r /etc/csf/csf.blocklists }' /var/cpanel/mainip

此代码不正确,因为它会输出错误:

sed:-e表达式#1,字符0:不匹配的`{'

成功后,应使用实际的服务器IP地址替换1.2.3.4。

2 个答案:

答案 0 :(得分:1)

sed -i "s/1\.2\.3\.4/$(</var/cpanel/mainip)/"  /etc/csf/csf.blocklists

应该做这项工作。

答案 1 :(得分:0)

您只需要指定

sed -i '/1.2.3.4/r /etc/csf/csf.blocklists' /var/cpanel/mainip

实际上,空格也是可选的;以下操作也可以

sed -i '/1.2.3.4/r/etc/csf/csf.blocklists' /var/cpanel/mainip

您只需指定模式/1.2.3.4/并在其后指定一个命令
该命令可以是r用于读取,w用于写入,d用于删除以及其他一些命令
d删除条目的示例为

sed -i '/1.2.3.4/d' /var/cpanel/mainip