Подстановка текста с определенными полями в файле журнала.

У меня есть следующее:

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 данными в следующем столбце без символов <>.

0
23.11.2016, 18:02
2 ответа

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

1
28.01.2020, 02:34

Проверьте это:

$ sed 's/PIPE <\(.*\)>/\1 <\1>/g' -i file.txt
1
28.01.2020, 02:34

Теги

Похожие вопросы