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

sed变量引用报错,求XML合并脚本修正及可选正则方案

问题分析与解决方案

原脚本错误原因

你遇到的 sed: -e expression #1, char 1: unknown command: ''` 错误,根源在于变量引用时的引号混乱。原脚本用普通字符串变量存储sed规则,混合使用单双引号导致变量展开后出现未闭合的引号或特殊字符,sed无法正确解析表达式。

修复后的脚本(满足所有需求)

#!/bin/bash

# 配置输出路径(可根据需要修改)
OUTDIR="./merged_xml"
OUTFILE="combined_output.xml"
mkdir -p "$OUTDIR"

# 定义各规则集合(数组形式,避免引号问题)
# 规则1:移除XML头(单独一行或行首的XML声明)
rule_xml_header=(
    '-e' '/^ *<\?xml[^>]*>$/d'
    '-e' 's/^ *<\?xml[^>]+>//'
)

# 规则2:删除空行(包括仅含空白字符的行)
rule_empty_lines=(
    '-e' '/^[[:space:]]*$/d'
)

# 规则3:移除行首空格和制表符
rule_leading_whitespace=(
    '-e' 's/^[ \t]*//'
)

# 提示用户选择要启用的规则
echo "请选择要应用的规则(输入逗号分隔的数字,例如1,2):"
echo "1. 移除XML头(单独行或行首的声明)"
echo "2. 删除空行"
echo "3. 移除行首空格/制表符"
read -p "你的选择:" selection

# 初始化sed参数数组
sed_args=()

# 解析用户选择,组装sed参数
IFS=',' read -ra choices <<< "$selection"
for choice in "${choices[@]}"; do
    case "$choice" in
        1)
            sed_args+=("${rule_xml_header[@]}")
            ;;
        2)
            sed_args+=("${rule_empty_lines[@]}")
            ;;
        3)
            sed_args+=("${rule_leading_whitespace[@]}")
            ;;
        *)
            echo "警告:无效选项 $choice,已忽略"
            ;;
    esac
done

# 检查是否选择了有效规则
if [ ${#sed_args[@]} -eq 0 ]; then
    echo "错误:未选择有效规则,退出"
    exit 1
fi

# 处理每个XML文件并合并到输出
while read -r xmldat; do
    [ -z "$xmldat" ] && continue
    if [ -f "$xmldat" ]; then
        sed "${sed_args[@]}" "$xmldat" >> "$OUTDIR/$OUTFILE"
    else
        echo "警告:文件 $xmldat 不存在,已跳过"
    fi
done <<< "$files"

echo "合并完成,输出文件路径:$OUTDIR/$OUTFILE"

关键改进点

  1. 使用bash数组存储规则:每个sed -e 表达式作为数组独立元素,彻底避免引号展开问题,确保sed能正确解析每个规则。
  2. 用户可选规则组合:通过交互式选择,支持任意1/2/3个规则的组合应用。
  3. 兼容非标准XML:基于行的文本处理,无需依赖XML解析工具,适用于无闭合标签等畸形XML。
  4. 易于扩展规则:新增规则只需:
    • 定义新的规则数组(如rule_new=( '-e' 'your_regex_here' ))
    • 在提示信息中添加对应选项
    • 在case语句中增加匹配分支

使用说明

  1. 确保变量$files已正确存储待处理的XML文件列表(每行一个文件路径)。
  2. 运行脚本,根据提示输入规则编号组合(如1,3表示启用移除XML头和行首空白的规则)。
  3. 合并后的文件会生成在指定的OUTDIR目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:33:24