UNIXの特定のパターン間でテキストを置き換える

UNIXの特定のパターン間でテキストを置き換える

ファイルのミリ秒フィールドを「:」パターンに置き換えたいと思います。

Input:-
Jun 12 2018  3:33:49:000PM
Jun 12 2018  3:33:49:850AM

Desired Output:-
Jun 12 2018  3:33:49.000PM
Jun 12 2018  3:33:49.850AM

私の側で次のSedコマンドを試しましたが、100%の結果が得られませんでした。以下は私のSEDコマンドです。

cat input.txt | sed 's/\(|\|^\|[A-Z]\)\([^|\]*\):\([0-9]\+\)\(AM\|PM\)\(|\|$\)/\1\2.\3 \4\5/g;s/"/ /g;s/:000/.000 /g' >output.txt

ベストアンサー1

努力する:

sed -E 's/:([0-9]+[AP]M$)/.\1/'

私は正規表現に問題があるかどうかを調べようとはしませんでしたが、個人的に必要な場合以外は行の先頭に一致しません。行の終わりだけを一致させるのも高速です。

おすすめ記事