You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Shell移除XML文件<age>标签中的隐藏换行符

解决XML中标签前隐藏换行符的问题

我来给你几个实用的命令,轻松搞定这个换行符问题:

方法1:用sed命令(最常用)

这个命令专门针对</name>后换行接<age>的场景,会把换行和<age>前的多余空白替换成单个空格,让<age>和前面内容归到同一行:

sed -i '/<\/name>$/{N;s/\n\s*<age>/ <age>/}' your_filename.xml

简单解释下:

  • /<\/name>$/:精准匹配以</name>结尾的行
  • N:把下一行(也就是带<age>的那行)读入当前处理空间
  • s/\n\s*<age>/ <age>/:把换行符+<age>前的任意空白,替换成单个空格加<age>

如果<age>前的换行可能出现在其他位置,试试全局替换的版本:

sed -i ':a;N;$!ba;s/\n\s*<age>/ <age>/g' your_filename.xml

它会扫描整个文件,把所有换行+任意空白+<age>的组合都改成空格+<age>。

方法2:用perl命令(更灵活)

perl处理多行文本替换特别顺手,这个命令会一次性读入整个文件,全局处理所有符合条件的换行:

perl -0777 -i -pe 's/\n\s*<age>/ <age>/g' your_filename.xml
  • -0777:让perl把整个文件当成一个完整字符串处理,忽略换行限制
  • -i:直接修改原文件(想留备份的话用-i.bak,会生成带.bak后缀的备份文件)
  • -pe:执行替换并输出结果

方法3:用awk命令(适合简单场景)

如果你的需求只是把<age>所在行和前一行合并,awk也能搞定:

awk 'NR>1 && /^<age>/ {printf " "} {printf "%s", $0}' your_filename.xml > temp.xml && mv temp.xml your_filename.xml
  • NR>1 && /^<age>/:如果不是第一行且行首是<age>,先打印一个空格
  • {printf "%s", $0}:不换行输出当前行内容
  • 最后把结果写入临时文件再替换原文件,避免直接修改出问题

执行完任意一个命令后,再用cat -e your_filename.xml验证,就能看到<age>标签已经和前面的内容在同一行,变成你想要的格式啦!

内容的提问来源于stack exchange,提问作者Sen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:33:13