You need to enable JavaScript to run this app. 如何在Bash脚本中去除XML同一标签内的换行与制表符 实现单标签单行
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中去除XML同一标签内的换行与制表符 实现单标签单行

适配老版Linux环境的XML跨行标签压缩脚本

无需安装重型XML解析工具,可直接在你当前的3.13内核Ubuntu环境运行,自动清除同个XML标签内的换行、制表符,实现单标签单行的输出效果,适配后续数据提取需求。

可直接运行的Bash脚本内容

#!/bin/bash
# 压缩跨行拆分的XML标签为单行输出
compact_xml() {
  local in_tag=0 buffer=""
  while IFS= read -r raw_line; do
    # 清理行首尾冗余空白
    line=$(echo "$raw_line" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')
    # 跳过文件中的纯空行
    [[ -z "$line" ]] && continue

    # 逐字符扫描识别XML标签边界
    while IFS= read -n 1 char; do
      if [[ "$char" == "<" ]]; then
        in_tag=1
        buffer+="$char"
        continue
      fi
      if [[ "$char" == ">" ]]; then
        in_tag=0
        buffer+="$char"
        # 压缩标签内连续冗余空白为单个空格,输出完整标签行
        echo "$buffer" | tr -s ' '
        buffer=""
        continue
      fi
      # 标签内部的字符直接累积入缓冲区
      [[ $in_tag -eq 1 ]] && buffer+="$char"
    done <<< "$line"
    # 当前行读完后如果标签未闭合,补充空格避免相邻属性拼接粘连
    [[ $in_tag -eq 1 ]] && buffer+=" "
  done
}
# 从入参指定的XML文件读取内容并输出压缩结果
compact_xml < "$1"

使用方式

  • 将上述内容保存为compact_xml.sh,赋予可执行权限:chmod +x compact_xml.sh
  • 执行处理命令,将原XML文件压缩为单标签单行格式:
    ./compact_xml.sh 原XML文件路径.xml > 压缩后输出.xml
    

适配性说明

  • 脚本全部依赖Linux系统原生的read/sed/tr基础工具,无第三方依赖,完全兼容Ubuntu 14.04的默认环境
  • 自动跳过标签之间的无意义空行,对标签内部拆分的属性、嵌套结构做换行合并,不会破坏XML本身的语法结构
  • 处理效果与预期格式完全匹配:将原本跨5行的<Device>标签、跨6行的<Param>标签,合并为不带多余换行、制表符的单行结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 04:54:06