用另一个文本替换多行Java注释的Sed

时间:2013-09-25 22:31:25

标签: java regex sed

我有一些java代码:

/**
 * Some comment.
 */
void someFunction();

/**
 * Some comment.
 */
void anotherFunction();

如何编写单行sed将上述内容转换为

@Override
void someFunction();

@Override
void anotherFunction();

我能做的最好的事情就是用

删除评论
sed '/\/\*\*/,/\*\// d'

并手动插入@Override

编辑:方法签名并不总是无效()。

3 个答案:

答案 0 :(得分:1)

如果您也可以使用awk,则可以:

$ awk '/\/\*/ {p=0; next} /\*\// {p=1; print "@Override"; next}p' file
@Override
void someFunction();

@Override
void anotherFunction();

@Override
char Bla();

对于给定的文件

/**
 * Some comment.
 */
void someFunction();

/**
 * Some comment.
 */
void anotherFunction();

/**
 * Some comment.
 */
char Bla();

答案 1 :(得分:1)

您可以使用sed在'* /'

之后插入新行
sed '/\*\// a @Override' file

然后运行您的命令 -

sed '/\/\*\*/,/\*\// d' file

这样,即使不以void开头,也可以为每个方法添加@override。但是每个方法都应该有评论部分。

答案 2 :(得分:1)

以下是单次传递sed:

的方法
sed '/\/\*\*/,/\*\// {s/.*\*\/.*/@Override/p; d}'

大括号内的命令仅针对作为评论一部分的行运行,而s/.*\*\/.*/@Override/p仅匹配评论的结尾,然后根据需要打印@Override