如何使用 sed 将 Java 文件中的多行注释替换为单行注释?

如何使用 sed 将 Java 文件中的多行注释替换为单行注释?

假设我有以下文件Test.java

import java.io.*;

/* test comment */
public class Test { /* another test comment */
    ...
    ...
    ...
}

Java程序可以包含单行//注释和多行/* ... */注释。我想要完成的是找到占据一行的/* ... */注释并用注释替换它们。因此,替换后,应该如下所示:Test.java//Test.java

import java.io.*;

// test comment
public class Test { // another test comment
    ...
    ...
    ...
}

我尝试sed通过执行以下操作来做到这一点:

sed -ri 's//\* ([.]*[ ]*) \*//// \1/' Test.java

然而,这似乎并没有改变任何事情。因此,我想知道如何在保持行的其余部分不变的情况下替换注释?我不确定如何实现这种行为。我认为我的正则表达式不知何故关闭了,但我不完全确定为什么。任何反馈或建议将不胜感激。

答案1

这将做到这一点:

sed 's_/\*\(.*\)\*/_//\1_' <Test.java

其工作方式如下:

  • 我使用 the_作为分隔符,这样我就不必转义/ 字符
  • /\*'/*' 与(转义 *)匹配
  • \(我记得上面使用和之间的东西\)
  • 然后替换为'//'(无需转义)和记住的内容\1

一旦您确认它满足您的要求,只需添加-i并删除 <

sed -i 's_/\*\(.*\)\*/_//\1_' Test.java

答案2

我怀疑你的第二个要点是:

'/*' is matched with /\* (escaping the *) and '*/' is matched with \*/

相关内容