ファイル内のタイムスタンプ形式を置き換える

ファイル内のタイムスタンプ形式を置き換える

以下のようなタイムスタンプ形式を含むファイルがあります。

'2020-03-07T14:42:36Z UTC [ db=dev user=rdsdb pid=16913 userid=1 xid=5326 ]' LOG: SET statement_timeout TO 120000

このタイムスタンプの形式を次のように変更したい

2020-03-07 14:42:36 UTC

このファイル内。

これは、形式を直接変更する権限がなく、このような行が数十億行あるログ ファイルです。

答え1

sed -e 's/T/ /' -e 's/Z//' file

あるいは、同等に、

sed 's/T/ /; s/Z//' file

これはまずファイルの各行の最初のT文字をスペースに置き換え、次に最初の を削除しますZ。これは次のように変換されます。

'2020-03-07T14:42:36Z UTC [ db=dev user=rdsdb pid=16913 userid=1 xid=5326 ]' LOG: SET statement_timeout TO 120000

の中へ

'2020-03-07 14:42:36 UTC [ db=dev user=rdsdb pid=16913 userid=1 xid=5326 ]' LOG: SET statement_timeout TO 120000

データを保存するには、新しいファイルにリダイレクトします。ファイルのインプレース編集を行う場合は、まず編集が正しく実行されていることを確認します (コマンドでは、各行にこのようなタイムスタンプが 1 つ以上 1 つ以下存在しないことを前提としています)。その後、 を使用してsed -iファイルをインプレースで変更します。

関連情報