Как заменить блок catch в * .java с помощью sed? - PullRequest
0 голосов
/ 14 октября 2010

Как заменить следующий шаблон в 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 ]

1 голос
/ 14 октября 2010

вы можете использовать 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. Не требуется сложное регулярное выражение.

0 голосов
/ 14 октября 2010

Вы можете использовать этот 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{
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...