シェルスクリプトを使用してファイルの1行で複数の文字列を検索および置換/変更

シェルスクリプトを使用してファイルの1行で複数の文字列を検索および置換/変更

私はシェルスクリプトに初めて触れました。

私が持っているのは、各行が次のように始まるログファイルです。

[2021.04.27.17:03:43.813]: ERROR -
[2021.04.27.17:04:36.790]: SUCCESS -

希望する新しいファイル出力は次のとおりです。

2021-04-27 17:03:43 813,ERROR,
2021-04-27 17:04:36 790,SUCCESS,

私がコーディングしたのは

while read a; do
    echo ${a//"["/""}
    echo ${a//"]"/""}
done < xms.log > resultlog.txt

上記のコードは、代替行から角括弧を削除します。これは、最初の行「[」で始まる角かっこが削除され、2行目「]」で終わる角括弧が削除されることを意味します。すべての行から両方の行を削除したいと思います。さらに、ハイフンに変更したい点は、上記の例にすでに表示されています。

ベストアンサー1

ストリームエディタを使用してsedテキストファイルを変更します。

sed 's/\./-/;s//-/;s// /;s// /;s/: /,/;s/ -/,/;s/\[//;s/]//' xms.log > resultlog.txt

スクリプトには、セミコロンで区切られたs形式の代替コマンドのみが含まれています。最初の点をダッシュ​​に置き換えます。次のポイントも交換したいので、パターンを繰り返す必要はありません。パターンを空白にして、他の必須の交換もすべて同じ方法で完了してください。正規表現構文で特別な意味のある文字を一致させる必要がある場合は、バックスラッシュ(および:)を使用してエスケープする必要があります。s/pattern/replacement/s/\./-/s//-/\.\[

読みやすく、次のように書くこともできます。

sed 's/\./-/
     s/\./-/
     s/\./ /
     s/\./ /
     s/: /,/
     s/ -/,/
     s/\[//
     s/]//' xms.log > resultlog.txt

おすすめ記事