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

使用Sed处理文本文件:仅保留time行的第二个冒号

解决Bash脚本中Time字段格式问题的方案

修改后的完整脚本

#!/bin/bash

# 上传文件脚本
# 删除当前文件(-f参数避免文件不存在时报错)
rm -f /home/pi/allsky/realtimegauges.txt
# 从网络获取气象文本文件
wget https://www.melvinweather.com/realtimegauges.txt
# 修改文本文件权限
chmod 777 realtimegauges.txt
# 移除{符号
sed -i 's/{//g' realtimegauges.txt
# 将date替换为time
sed -i 's/date/time/g' realtimegauges.txt
# 移除"符号(若实际文件是普通双引号,可改为`s/"//g`)
sed -i 's/"//g' realtimegauges.txt
# 处理冒号:time行仅替换第一个冒号为等号,其他行替换所有冒号为等号
sed -i '/time/ s/:/=/; !s/:/=/g' realtimegauges.txt
# 移除末尾的,
sed -i 's/,//g' realtimegauges.txt
# 复制文件到指定目录
cp realtimegauges.txt /home/pi/allsky/tmp/extra

关键修改说明

原脚本中sed -i 's/:/=/g'会替换所有冒号为等号,导致time字段变成time=xx=xx的错误格式。我们通过sed的分支匹配功能修正:

  • /time/ s/:/=/:匹配包含time的行,仅替换第一个冒号为等号,保留时间里的第二个冒号
  • !s/:/=/g:对不包含time的行,替换所有冒号为等号,保证其他字段格式正确

可选的精准处理方案(针对标准JSON键值对)

如果气象文件每行都是严格的"key":"value",格式,也可以用更精准的匹配替换,避免意外修改:

# 替换date为time并直接格式化time行
sed -i 's/"date":"\([0-9]*:[0-9]*\)"/time=\1/' realtimegauges.txt
# 格式化其他所有键值对
sed -i 's/"\([^"]*\)":"\([^"]*\)"/\1=\2/' realtimegauges.txt
# 移除{符号和末尾逗号
sed -i 's/{//g; s/,//g' realtimegauges.txt

这种方式直接针对JSON键值对结构处理,不需要单独处理引号和冒号的顺序,容错性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:05:26