删除 XML 格式中双引号内的空格

要使用 Shell 命令删除 XML 格式中双引号内的空格(仅处理属性值中的空格,保留标签外的空格),可以使用以下 sed 命令

bash 复制代码
sed -i ':loop; s/\("[^"]*\) \([^"]*"\)/\1\2/g; t loop' filename.xml

命令详解:

  1. 核心逻辑

    • s/\("[^"]*\) \([^"]*"\)/\1\2/g
      匹配双引号内的内容,将捕获分组 \1(双引号后到空格前的文本)和 \2(空格后到双引号结束的文本)合并,从而删除一个空格。
    • :loop; t loop
      通过循环重复执行替换,直到一行中所有双引号内的空格都被删除。
  2. 关键特性

    • 仅处理属性值(如 name="John Doe"name="JohnDoe"),标签外的空格(如缩进、换行)保留不变。
    • 支持一行内多个属性(如 <tag a="val 1" b="val 2"><tag a="val1" b="val2">)。

示例验证:

输入 XML

xml 复制代码
<data>
  <item name="Product 123" price="100 USD"/>
  <info desc="A test example" />
</data>

执行命令后

xml 复制代码
<data>
  <item name="Product123" price="100USD"/>
  <info desc="Atestexample" />
</data>

系统适配:

  • Linux/macOS(BSD sed)
    直接运行上述命令(macOS 需先安装 GNU sed,或改用 sed -i '' '...')。
  • Windows(Git Bash/WSL)
    确保在 Bash 环境中运行,语法相同。

注意事项:

  1. 不处理转义双引号
    若属性值包含转义双引号(如 \"),此命令可能出错。复杂 XML 建议使用专业解析器(如 xmlstarlet)。

  2. 备份文件
    首次使用建议先备份文件,或去掉 -i 测试输出:

    bash 复制代码
    sed ':loop; s/\("[^"]*\) \([^"]*"\)/\1\2/g; t loop' filename.xml

替代方案(简单场景):

若空格仅出现在属性值中间(非开头/结尾),可用简化命令:

bash 复制代码
sed -i 's/\(="[^"]*\) /\1/g' filename.xml

此方法基于 Shell 文本处理逻辑,通过循环替换解决边界问题。对于含转义或嵌套结构的 XML,推荐使用专用工具如 xmlstarlet


相关问题

  1. 如何保留属性值中的特定空格(如英文单词间的单个空格)?
  2. 使用 awk 处理 XML 文件时,如何安全删除双引号内的空格?
  3. 若 XML 属性值包含转义字符(如 &quot;),应如何避免解析错误?

:
引用[1]:【Shell】Sed 删除、替换、增加字符串。方式3: 使用单引号,变量直接引用,但是需要通过 eval 执行这个sed命令。eval会对后面Shell命令进行两遍扫描,如果第一遍扫描后,Shell命令是个普通命令,则执行此命令;如果Shell命令是含有变量的间接引用,则保证间接引用的语义 #!/bin/bash name=tomas eval sed -i 's/rose/${name}/g' name.txt 变量中存在特殊字符处理

相关推荐
微笑伴你而行5 小时前
目标检测如何将同时有方形框和旋转框的json/xml标注转为txt格式
xml·目标检测·json
fatiaozhang952710 小时前
数码视讯TR100-OTT-G1_国科GK6323_安卓9_广东联通原机修改-TTL烧录包-可救砖
android·xml·电视盒子·刷机固件·机顶盒刷机
l1t11 小时前
美团龙猫利用expat库实现的保存xml指定范围数据到csv的C程序
xml·c语言·解析器·expat
l1t2 天前
DuckDB新版rusty_sheet 插件测试
xml·数据库·rust·插件·xlsx·duckdb
l1t2 天前
美团龙猫(longcat.AI)编写的利用二分查找优化Excel的sheet.xml指定范围输出C程序
xml·c语言·excel·解析器
LB21122 天前
MyBatis xml配置文件
xml·java·mybatis
霜绛4 天前
Unity:XML笔记(一)——Xml文件格式、读取Xml文件、存储修改Xml文件
xml·笔记·学习·unity·游戏引擎
fatiaozhang95274 天前
晶晨线刷工具下载及易错点说明:生成工作流程XML失败
android·xml·网络·电视盒子·刷机固件·机顶盒刷机
l1t4 天前
利用DeepSeek编写验证xlsx格式文件中是否启用sharedStrings.xml对读写效率影响python程序
xml·开发语言·python·算法·xlsx