正则表达式,多行

时间:2010-09-17 08:33:14

标签: regex scripting sed

我想删除一对“}”之间的所有文字其中包含特定关键字。 我想要的是

输入:

}; text text KEYWORD text text };

输出:

};   };

建议我一个简单的正则表达式。我知道'sed'将被使用。

4 个答案:

答案 0 :(得分:2)

\};[^}]*KEYWORD[^}]*\};
如果两个分隔符之间没有},则

将起作用。

所以:

sed 's/\};[^}]*KEYWORD[^}]*\};/}; };/g' file.in > file.out

答案 1 :(得分:2)

这应该在大多数情况下都有效:

sed '/};[^}]*};/{s/};[^}]*};/}; };/;b};/};/!b;:a;N;/\n[^}]*};/!ba;s/[^;]*\n.*\n[^}]*/ /' inputfile

可能会出现一些失败的极端情况。如果希望结果位于两行,请将末尾附近的空间更改为\n

示例:

}; test ;}变为}; };

};
test
};
变为}; };

abc };
test
}; def
变为abc }; }; def

abc }; 111
test1
test2
222 }; def
变为abc }; }; def

答案 2 :(得分:0)

以下正则表达式将匹配您要删除的内容 -

(?<=\};).*?KEYWORD.*?(?=\};)

编辑:这不会像@Tim所指出的那样与sed一起工作,因为sed不支持外观。

答案 3 :(得分:0)

最简单的方法:

cat file.in | sed "/KEYWORD/s/};[^}]*};/}; };/g" > file.out