テキストの置換には、ログファイルの特定のフィールドを使用します。

テキストの置換には、ログファイルの特定のフィールドを使用します。

私はこれを持っています:

00:05:40.005 id=32214483 Src=PIPE <[email protected]> (received) [email protected] relayed (1234 bytes)

私はこれを達成する必要があります:

00:05:40.005 id=32214483 [email protected] <[email protected]> (received) [email protected] relayed (1234 bytes)

注 - ファイル内の他のデータが必要な正しい形式を持っているため、データを「列ごとに」交換してファイル全体に適用することはできません。 Src = PIPEのすべてのインスタンスを<>記号なしで次の列のデータに置き換えたいと思います。

答え1

私はPerl onelinerがあなたが望むことをすると信じています:

perl -i.bak -pe 's/Src=PIPE\s+<(\w+?@\w+?\.\w+?)>\s+?/Src=$1 <$1> /;' [file(s)]

山かっこで囲まれた要素が電子メールアドレスであることを確認せずにこれを行うもう1つの方法は次のとおりです。

perl -i.bak -pe 's/Src=PIPE\s+<(.*?)>\s+?/Src=$1 <$1> /;' [file(s)]

-i.bakコマンドラインで処理されたすべてのファイルをバックアップします。

答え2

確認する:

$ sed 's/PIPE <\(.*\)>/\1 <\1>/g' -i file.txt

関連情報