替换两个匹配项之间的文本(从一个文件替换到另一个文件)

替换两个匹配项之间的文本(从一个文件替换到另一个文件)

所以我有两个文件:

/etc/some/file1.xml
/etc/some/file1.xml_bck

这些文件是包含一堆指令的配置文件(全部在一行中)。内容如下:

<SOMETHING>somehost.domain.com;192.123.123.124;SOMEHOST1.DOMAIN.UK</SOMETHING>

我的目标是用 /etc/some/file1.xml_bck 替换 /etc/some/file1.xml 之间的所有文本

我想sed这可以起到作用,但是这有点超出我的能力范围。

答案1

考虑两个文件:

老的:

<SOMETHING>xxxxxxxxxx</SOMETHING>

新的:

<SOMETHING>yyyyyyyyyy</SOMETHING>

您可以运行:

$ subst=$(grep -o '<SOMETHING>.*</SOMETHING>' OLD)
$ sed -e "s~<SOMETHING>.*<\/SOMETHING>~${subst}~" NEW
<SOMETHING>xxxxxxxxxx</SOMETHING>

并且这是假设它~不会出现在您要复制的文本块中。Sed 允许您使用几乎任何字符作为分隔符,因此根据文本的不同,分隔符可能是,?等。

相关内容