忽略Java文件中的注释范围

时间:2019-04-17 09:27:22

标签: regex shell grep

我的目标:在Java文件中使用grep时,忽略所有注释

说我有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. 确认并删除匹配的模式
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;        

请分享您的一些解决方案。谢谢!

0 个答案:

没有答案