Игнорировать диапазоны комментариев в Java-файле - PullRequest
0 голосов
/ 17 апреля 2019

Моя цель: игнорировать все комментарии, когда 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 метода:

  1. pcre2grep -v
    REGEX_IS_COMMENT ='(logger\\..*$)|([/][/].*$)|((\\/\\*)(.|[\r\n])+?(\\*\\/))'
    pcre2grep -MnvH "$REGEX_IS_COMMENT" $input> $output

=> Ошибка: -v фильтровать «строки», которые не соответствуют регулярному выражению, поэтому все «строка 2» и «строка 3» не будут отображаться в выходном файле

  1. 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;        

Пожалуйста, поделитесь некоторыми из ваших решений. Спасибо!

...