
以下のようなタイムスタンプ形式を含むファイルがあります。
'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
ファイルをインプレースで変更します。