Подмена текста с помощью определенных полей в файле журнала.

У меня есть это:

00:05:40.005 id=32214483 Src=PIPE <abc@example.com> (received) To=xyz@example.com relayed (1234 bytes) 

Мне нужно добиться этого:

 00:05:40.005 id=32214483 Src=abc@example.com <abc@example.com> (received) To=xyz@example.com relayed (1234 bytes) 

ПРИМЕЧАНИЕ. – Я не могу поменять данные «по столбцу» и применить их ко всему файлу, так как у меня есть другие данные в файле, который имеет нужный мне формат. Я просто хочу поменять все экземпляры Src = PIPE на данные в следующем столбце без символов <>.

Я считаю, что perl один лайнер сделает то, что вы:

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

Другой способ, который не проверяет, чтобы элемент в угловых скобках был адресом электронной почты:

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

-i.bak создает резервную копию каждого из файлов, обрабатываемых в командной строке.

Проверь это:

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