如何使用sed替换* .java中的catch块?

时间:2010-10-14 09:40:50

标签: unix shell sed awk

如何在java项目中替换以下模式

catch(SQLException e) {
       \\TO DO

}

catch(SQLException e) { S.O.P(); }

请注意,该文件将包含其他模式,如

catch(IOException e) {
    // To Do }

不应该改变。

我试过

sed 's/catch\(SQLException[^\}]*}/catch(SQLException e)\{S.O.P();\}/g' file.java

但它不起作用。

2 个答案:

答案 0 :(得分:1)

你可以使用awk

$ more file
catch(SQLException e) {
       \\TO DO

}
catch(IOException e) {
    // To Do }

$ awk -vRS="}" '/catch\(SQLException e\)/{$0="catch(SQLException e) { S.O.P();" }NR{print $0RT}  ' file
catch(SQLException e) { S.O.P();}

catch(IOException e) {
    // To Do }

说明:将记录分隔符设为}。然后检查SQLException。如果找到,请将记录$0设置为新记录。不需要复杂的正则表达式。

答案 1 :(得分:0)

您可以使用此Perl脚本:

use strict;

my $file = '';
$file.=$_ while(<>);
$file=~s[catch\s*\(\s*SQLException\s*(\w+)\)\s*\{.*?\}][catch(SQLException $1) { S.O.P(); }]sg;
print $file."\n";

示例运行:

输入文件:

try { int a = 0/0; }
catch(SQLException e) {
\\TO DO
}
catch(MyOwnException e){
// MORE THINGS
}
finally{

结果:

try { int a = 0/0; }
catch(SQLException e) { S.O.P(); }
catch(MyOwnException e){
// MORE THINGS
}
finally{
相关问题