sed commdand-多次出现字符串时,查找和替换字符串模式不起作用

时间:2018-07-18 12:35:28

标签: xml bash sed

我不是UNIX命令方面的专家,但是试图通过查找和替换目录下的XML文件来创建一个复杂的替换。

这是我的文件结构:

<LocaleCountry>
<link href="../Countries/AZ.xml" path="/Config/Countries/AZ"/>
<link href="../Countries/AM.xml" path="/Config/Countries/AM"/>
</LocaleCountry>

我正在尝试通过使用命令在两种模式下进行替换,因为我们的服务器仅将sed作为适当的命令,所以sed是必需的...

转型

from <link href="../Countries/ to <Country file="
from path="/Config/Countries/ to code="

所以最终我的输出应如下所示:

<LocaleCountry>
<Country file="AZ.xml" code="AZ"/>
<Country file="AM.xml" code="AM"/>
</LocaleCountry>

我尝试过的方法有效,但是没有多个“链接”元素,它只会更改第一个元素,而不会影响其他元素,很可能我无法为我的模式创建正确的表达式...

这是我尝试过的:

sed -i 's#<link href="../Countries/#<Country file="#' *.xml
sed -i 's#path="/Config/Countries/#code="#' *.xml

能否请您检查我做错了什么,并在可能的情况下提出解决方案?

1 个答案:

答案 0 :(得分:2)

只需告诉替换命令使其全局:

sed -i 's#<link href="../Countries/#<Country file="#g' *.xml
sed -i 's#path="/Config/Countries/#code="#g' *.xml