正则表达式,多行
我想删除一对“};”之间的所有文本“其中包含特定的关键字。 我要的是正则表达式,多行
输入:
}; text text KEYWORD text text };
输出:
}; };
推荐我一个简单的正则表达式。我知道'sed'会被使用。
这应该在大多数情况下工作:
sed '/};[^}]*};/{s/};[^}]*};/}; };/;b};/};/!b;:a;N;/\n[^}]*};/!ba;s/[^;]*\n.*\n[^}]*/ /' inputfile
有可能会是一些角落情况下失败。如果您希望结果在两行上,请将结尾处的空格更改为\n
。
实例:
}; test ;}
变得}; };
};
变得
test
};}; };
abc };
变得
test
}; defabc }; }; def
abc }; 111
变得
test1
test2
222 }; defabc }; }; def
下面的正则表达式匹配,你要删除的东西 -
(?<=\};).*?KEYWORD.*?(?=\};)
编辑:使用sed由@Tim指出了sed的不支持该不会工作lookarounds。
这不是查找关键字,并且不会在sed中工作(没有查找)。 – 2010-09-17 08:39:43
感谢@Tim将它引入我的注意事项。固定。是的,这是普通的正则表达式,我不确定sed的具体情况。 – Gopi 2010-09-17 08:42:51
可能的最简单的方法:
cat file.in | sed "/KEYWORD/s/};[^}]*};/}; };/g" > file.out
http://en.wiktionary.org/wiki/please – 2010-09-17 08:37:33
对不起,我不知道协议。我会记住现在开始 – sole007 2010-09-17 09:05:08