我有这个 xml 数据
<institution>
<id>83812745840</id>
<code>2701811200</code>
<full_name>full name 1</full_name>
<address>adress 1</address>
<institution_type>
<id>191</id>
<code>inst code 1</code>
<name>institution name1</name>
</institution_type>
<place>
<id>812007638</id>
<name>place-name_1</name>
<code>415995</code></place>
<activity>
<code>811855905</code>
<name>act-name-1</name>
<equipment_specialty>false</equipment_specialty>
</activity>
</institution>
我需要改变<code>
与 <code_>
和<place><name>
与 <place><name_>
。如何使用 sed 和 regex 来完成此操作?
我尝试过 sed 's/<institution>.*<code>.*<\/code>/<institution>.*<code_>.*<\/code_>/g'
但替换字符串上的 .* 变为 .* ,而不是与正则表达式匹配的任何字符串。
最佳答案
这里的主要问题是不要使用 XML/HTML 解析器,而在处理 XML/HTML 数据时始终应该使用它们:
使用 xmlstarlet
工具的正确方法:
xmlstarlet ed -O -r '//institution/code' -v 'code_' -r '//place/name' -v 'name_' input.xml
输出:
<institution>
<id>83812745840</id>
<code_>2701811200</code_>
<full_name>full name 1</full_name>
<address>adress 1</address>
<institution_type>
<id>191</id>
<code>inst code 1</code>
<name>institution name1</name>
</institution_type>
<place>
<id>812007638</id>
<name_>place-name_1</name_>
<code>415995</code>
</place>
<activity>
<code>811855905</code>
<name>act-name-1</name>
<equipment_specialty>false</equipment_specialty>
</activity>
</institution>
<小时/>
要就地修改文件,请添加 -L
选项:xmlstarlet ed -O -L ....
关于regex - 使用 sed 和正则表达式来替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48345041/