sed 命令仅在未写入输出文件时起作用

sed 命令仅在未写入输出文件时起作用

我想更改此文件 eq.txt

2018-05-03T18:46:05.050Z 11.8314 44.0586 10 4.3 USGS
2018-05-01T05:16:59.270Z 11.0366 43.2334 10 4.1 USGS
2018-04-26T11:13:20.590Z -5.4109 36.5557 10 4 USGS
2018-04-25T09:48:42.940Z 14.8129 41.9053 10 4.3 USGS

到 eq-new.txt

2018 05 03 18 46 05.050 11.8314 44.0586 10 4.3 USGS
2018 05 01 05 16 59.270 11.0366 43.2334 10 4.1 USGS
2018 04 26 11 13 20.590 -5.4109 36.5557 10 4 USGS
2018 04 25 09 48 42.940 14.8129 41.9053 10 4.3 USGS

我使用更改日期和时间格式

sed -r "s/([0-9.]+)-([0-9.]+)-([0-9.]+)T([0-9.]+):([0-9.]+):([0-9.]+)\.000Z/\1 \2 \3 \4 \5 \6.000/g" eq.txt

这如我所愿。

但是,由于我想将结果保存在 eq-new.txt 中,所以我这样做

sed -r "s/([0-9.]+)-([0-9.]+)-([0-9.]+)T([0-9.]+):([0-9.]+):([0-9.]+)\.000Z/\1 \2 \3 \4 \5 \6.000/g" eq.txt > eq-new.txt

不幸的是,输出文件是错误的,eq-new.txt中的日期和时间格式与eq.txt中的相同

我也尝试过这个

tmp=$(sed -E "s/([0-9.]+)-([0-9.]+)-([0-9.]+)T([0-9.]+):([0-9.]+):([0-9.]+)\.000Z/\1 \2 \3 \4 \5 \6.000/g" tmp.txt)
echo -ne "$tmp" > eq-new.txt

不再成功!

我发现有关 sed 和 outfiles 的任何内容都不起作用。

有任何想法吗?

答案1

您的模式匹配时间以.000(literal) 结尾,并且没有行包含这样的时间。您基本上没有匹配项,因此永远不会触发替换。

相关内容