Sed 命令将一个文件中的字符串替换为另一个文件的内容

Sed 命令将一个文件中的字符串替换为另一个文件的内容,sed,pipe,sh,cat,Sed,Pipe,Sh,Cat,文件/var/cpanel/mainip包含我的服务器的主IP,而不包含其他内容。 文件/etc/csf/csf.blocklists包含一个防火墙阻止列表列表,文件的一部分包含一行示例IP地址1.2.3.4 通常,在新服务器上安装CSF防火墙软件时,我会手动将示例IP地址替换为服务器的主IP地址。这是从某些提供商成功获取防火墙阻止列表所必需的。 为了简化安装过程,我需要一个命令,将示例IP地址1.2.3.4替换为我的主服务器IP,这样我就不必手动执行 我已经尝试了sed命令,我想我已经接近正确

文件/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,字符0:不匹配的`{'


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

sed-i“s/1\.2\.3\.4/$(您只需要指定

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

事实上,甚至空格也是可选的;下面的操作也可以

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

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


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

}
之前插入换行符或删除无用的
{
}
a
i
c
r
r
w
w
命令都要求以换行结束。由于您的地址
/1.2.3.4//code>后面只有一个命令,即
r文件
,因此无需用括号将其包围。如果在t后面附加第二个命令同一个地址,将需要paren,但也需要两个命令字符串,例如,如果虚拟地址行也要删除
sed-e'/1.2.3.4/{r file'-e'd}文件
。我认为
sed-I'/1.2.3.4/{r/etc/csf/csf.blocklist;}“/var/cpanel/mainip
也可能有效。请注意关闭前的
。但我最喜欢下面的Mihir解决方案。我认为您修改的文件仍将包含
1.2.3.4
。祝您好运。