如何用Shell脚本合并XML标签内多行内容并原地修改文件?
解决XML标签内多行内容合并为单行的Shell脚本方案
需求说明
将XML文件中被拆分成多行的标签内容合并为单行,直接修改原文件。
输入示例:
<lineid>Product testing machine </lineid>
预期输出:
<lineid>Product testing machine </lineid>
解决方案
使用sed命令实现跨行内容合并,命令如下:
sed -i.bak '/<[^>]*>$/{:a;N;/<\/[^>]*>/!ba;s/\n/ /g;s/ */ /g}' your_file.xml
命令解释
-i.bak:直接修改原文件,同时生成带.bak后缀的备份文件(若无需备份,可简化为-i,但建议保留备份以防数据丢失)/<[^>]*>$/:匹配以起始标签结尾的行(如<lineid>所在行):a:定义循环标记aN:将下一行内容读取到当前处理的模式空间中/<\/[^>]*>/!ba:如果当前模式空间内未找到闭合标签,则跳转到标记a继续读取下一行s/\n/ /g:将所有换行符替换为空格s/ */ /g:将连续多个空格替换为单个空格,避免内容出现冗余空格
注意事项
- 该脚本适用于无嵌套标签的XML结构,若存在标签嵌套,建议使用专门的XML处理工具(如
xmllint) - 处理完成后,可通过
rm your_file.xml.bak删除备份文件 - 若标签内包含特殊转义字符(如
&、<等),该命令不会破坏其原有格式
内容的提问来源于stack exchange,提问作者Amey K
相关产品推荐
相关产品推荐

