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(リテラル)で終わり、そのような時間を含む行はありません。デフォルトでは一致するものがないため、交換はトリガされません。

関連情報