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

使用Bash脚本修改XML文件中的指定时间格式

没问题,我帮你搞定这个Bash脚本修改XML时间格式的需求~

解决方案:用sed精准替换XML属性中的时间格式

我们可以借助sed命令来实现精准匹配和替换,它能只修改time="HH:MM:SS"格式的XML属性内容,不会干扰文件里其他无关的时间戳。

核心命令

先看直接可用的命令,假设你的源文件是input.xml,处理后输出到output.xml:

sed -E 's/time="([0-9]{2}):([0-9]{2}):[0-9]{2}"/time="\1-\2"/; s/time="0([0-9]):/\1-/' input.xml > output.xml

命令拆解说明

我把这条命令拆成两部分,方便你理解:

  • 第一步:去掉秒数,替换时间分隔符

    s/time="([0-9]{2}):([0-9]{2}):[0-9]{2}"/time="\1-\2"/
    

    这部分会匹配time="开头,接着两位小时、冒号、两位分钟、冒号、两位秒数的格式,把小时和分钟用分组捕获(\1对应小时,\2对应分钟),然后替换成time="小时-分钟",直接去掉了秒数部分。

  • 第二步:移除小时的前导零

    s/time="0([0-9]):/\1-/'
    

    这部分专门处理开头带0的小时(比如08),把前导零去掉,变成单个数字的小时格式,最终就得到你要的8-05样式。

直接修改原文件(可选)

如果你想直接修改源文件(记得先备份!),可以加-i参数(GNU sed适用):

sed -i -E 's/time="([0-9]{2}):([0-9]{2}):[0-9]{2}"/time="\1-\2"/; s/time="0([0-9]):/\1-/' input.xml

要是你用的是macOS的BSD sed,-i需要加个空参数:

sed -i '' -E 's/time="([0-9]{2}):([0-9]{2}):[0-9]{2}"/time="\1-\2"/; s/time="0([0-9]):/\1-/' input.xml

效果验证

比如原文件里的内容:

<event time="08:05:00" description="早上会议" otherTime="14:30:00" />
<note>上次更新时间12:00:00</note>

执行命令后会变成:

<event time="8-05" description="早上会议" otherTime="14:30:00" />
<note>上次更新时间12:00:00</note>

可以看到只有time属性里的时间被修改,其他位置的时间完全不受影响~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:03:35