首页 > 解决方案 > Sed commdand - 当字符串多次出现时,查找和替换字符串模式不起作用

问题描述

我不是 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

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

标签: xmlbashsed

解决方案


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

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

推荐阅读