У меня есть следующее:
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 one liner сделает то, что вы хотели:
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 делает резервную копию каждого из файлов, обрабатываемых в командной строке.