如何使用sed或perl命令删除模式的开始和结束模式之前的行之间的模式?

时间:2013-10-13 12:52:21

标签: regex perl sed ksh

这是输入文件

{1:IRVTUS30XXX}{2:I304dfaffaefa}{3:fewfa]}
:15A:
:20:1234556
:22:dsafas
dsafafaf
erwfafgr
:23:fewfd
:24:firh
:60:uncenjnjcdv
:72:uenuernfk
12345
-}

这里我想从输入文件中删除一些标签信息。 (标签是:15A :: 22:在冒号之间称为标签)

如果我想删除标签20,我可以使用以下perl命令:

perl -i -pe 's/:20:(.*)\r\n//g' file

但是对于像这样的标签:22:或:72:它的多个行标签..我怎么能删除那些?

2 个答案:

答案 0 :(得分:0)

这里有表达式来选择两个标签号。 22 并标记号码。的 72

:(72|22):([\w\d]*(\r?\n|\r\n?)+)+

Here是对比赛的考验。

答案 1 :(得分:0)

删除标签22的示例代码(适用于多行或单行):

% perl -00 -pe 's/^:22:.*?(?=(?:^:\d+\w*|$))//ms' file.txt
{1:IRVTUS30XXX}{2:I304dfaffaefa}{3:fewfa]}
:15A:
:20:1234556
:23:fewfd
:24:firh
:60:uncenjnjcdv
:72:uenuernfk
12345
-}