我有这个:
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)]
另一种不检查以确保尖括号中的元素是电子邮件地址的方法:
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