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

XML文件含指定字符串行的整数转固定长度浮点数问题

问题描述
  • 业务需求:将系统接收的特定XML格式数据中,code:value的纯整数值替换为固定9位小数格式(例如25转为25.000000000)
  • 现有问题:原sed命令sed -i 's/\(ordinary.*"[0-9]\+\)/\1.000000000/'会在文件被监控程序重复触发修改时,给已格式化的小数重复添加小数位,导致出现25.000000000.000000000的错误格式
解决方案

改进版sed命令

核心是精准匹配纯整数值的场景,避免对已格式化的小数重复操作:

sed -i 's/\(ordinary.*code:value="\)\([0-9]\+\)\("\)/\1\2.000000000\3/' 目标文件名

原理

正则精准匹配ordinary开头、code:value="后接纯整数、再以"结尾的片段,仅对这类片段添加固定小数位,已包含小数点的数值不会被匹配到。

awk处理方案

通过awk的匹配和分组功能,明确筛选纯整数进行格式化:

awk '/ordinary.*code:value="[0-9]+"/ {
    match($0, /(ordinary.*code:value=")([0-9]+)(")/, arr)
    $0 = arr[1] arr[2] ".000000000" arr[3]
}1' 目标文件名 > 临时文件 && mv 临时文件 目标文件名

原理

仅对包含纯整数code:value的行进行处理,提取整数部分后拼接固定小数位,其他行保持不变。

Shell脚本逐行处理

如果需要更灵活的扩展逻辑,可使用以下脚本:

#!/bin/bash
if [ $# -ne 1 ]; then
    echo "使用方法: $0 <目标文件>"
    exit 1
fi

FILE="$1"
TEMP_FILE=$(mktemp)

while IFS= read -r line; do
    # 匹配纯整数的code:value片段
    if [[ "$line" =~ (ordinary.*code:value=&quot;)([0-9]+)(&quot;) ]]; then
        line="${BASH_REMATCH[1]}${BASH_REMATCH[2]}.000000000${BASH_REMATCH[3]}"
    fi
    echo "$line" >> "$TEMP_FILE"
done < "$FILE"

mv "$TEMP_FILE" "$FILE"
echo "处理完成"

使用方法

  1. 将脚本保存为convert_int_to_decimal.sh
  2. 赋予执行权限:chmod +x convert_int_to_decimal.sh
  3. 运行脚本:./convert_int_to_decimal.sh 目标文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:23:55