Моя цель: игнорировать все комментарии, когда grep в java файле
Скажем, у меня есть файл Java "test.java"
/*
* multiple
* line
* comment
* range
*/
line 1;
line 2; // cmt line 2 日本語 abcd
line 3; // cmt line 3
// cmt line 4
Мой выходной файл должен быть таким:
line 1;
line 2;
line 3;
Мне нужно работать с многострочным регулярным выражением, поэтому я не могу использовать обычный grep.
На самом деле, я попробовал 2 метода:
- pcre2grep -v
REGEX_IS_COMMENT ='(logger\\..*$)|([/][/].*$)|((\\/\\*)(.|[\r\n])+?(\\*\\/))'
pcre2grep -MnvH "$REGEX_IS_COMMENT" $input> $output
=> Ошибка: -v фильтровать «строки», которые не соответствуют регулярному выражению, поэтому все «строка 2» и «строка 3» не будут отображаться в выходном файле
- awk и удаление совпавших шаблонов
REGEX_IS_COMMENT ='(logger\\..*$)|([/][/].*$)|((\\/\\*)(.|[\r\n])+?(\\*\\/))'
awk 'BEGIN{RS=SUBSEP;} {print gensub(REGEX_IS_COMMENT,"", "g", $0)}' REGEX_IS_COMMENT=$REGEX_IS_COMMENT $input> $output
=> Ошибка: точка (.) Не соответствует японским символам. Мой выходной файл был:
line 1;
line 2; 日本語 abcd
line 3;
Пожалуйста, поделитесь некоторыми из ваших решений. Спасибо!