我有一个类似下面的文件
LINE 1:
type,rcpt,dlvSourceIp,timeLogged,header_Message-Id,bounceCat,dsnStatus,dsnDiag
LINE 2: d,olaj,asjdfuyjdv,2014-02-07
14-08560,<13.e0.IM.45.811MSOSI1.102O@maien.com>,suc,2.0.0
(success),smtp;250 ok dirdel <13.e0.IM.45.811MSOSI1.102O@maien.com>
LINE 3: d,olaj,asjdfuyjdv,2014-02-07
14-08560,2014-02-07
17:30:14-0800,<1060.eb40.IGNM.1335313.816310169MSOSI1.10S@kashfgjqd.Ighrs.com>,suc,2.0.0 (success),smtp; jgfjasd jsydsj
<13960.e0.Igdf.1335313.816310I1.10@gsdfdrs.Iyre.com> Queued mail for
delivery
现在我想删除 <> 之间的第二次出现的单词。
预期输出:
LINE 1:
type,rcpt,dlvSourceIp,timeLogged,header_Message-Id,bounceCat,dsnStatus,dsnDiag
LINE 2: d,olaj,asjdfuyjdv,2014-02-07
14-08560,<13.e0.IM.45.811MSOSI1.102O@maien.com>,suc,2.0.0
(success),smtp;250 ok dirdel
LINE 3: d,olaj,asjdfuyjdv,2014-02-07 14-08560,2014-02-07
17:30:14-0800,<1060.eb40.IGNM.1335313.816310169MSOSI1.10S@kashfgjqd.Ighrs.com>,suc,2.0.0 (success),smtp; jgfjasd jsydsj Queued mail for delivery
因为在输出中 < 和 > 之间第二次出现的数据被删除...
我试过下面的命令,但它正在删除所有匹配的字符串。但我只想删除第二个字符串。
sed 's/<.*.>//' test.txt
任何帮助都非常有用。
最佳答案
你可以试试:
sed 's/\(<[^>]*>\)\(.*\)\(<[^>]*>\)/\1\2/' test.txt
- 检查 < >
- 然后检查任何文本
- 然后检查第二个 < >
输出:
只有 1 和 2
关于regex - 如何从 linux 中的文件的每一行中删除与模式匹配的重复单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21759365/