我正在将java注释添加到多个测试文件中。对于100多个地方的多个文件中的测试方法,我必须这样做。
使用一些脚本/正则表达式,我已经有了注释。剩下的部分是为这些注释提供属性值,例如如下面的情况所示,我需要将value = "search_pattern"
替换为value="replace_string1"
,其中replace_string1
是要添加注释的函数的名称(它在注释下面显示几行,请参阅片段供参考)。
每个文件可以有多个功能来应用注释,并且有许多这样的文件。
有没有办法编写脚本?
我还没有找到sed
的运气,我也不想手动完成所有这些操作。
@Prop(name = "Operation", value = "search_pattern")
...
@Test
public void replace_string1() {
...
}
@Prop(name = "Operation", value = "search_pattern")
...
@Test
public void replace_string2() {
}
答案 0 :(得分:1)
你可以在tac
的帮助下完成,它以相反的顺序打印文件,所以我们在最后再次调用它。
tac file | awk '/^public void/ {v=$3; sub(/\(\)/,"",v)}
/^@Prop\(name = \"Operation\"/ {sub(/search_pattern/,v,$0)} 1' |tac
here您可以看到awk
函数sub
。最后1
表示打印。
因此,例如,如果您想对目录中的所有*.java
执行此操作,则可以运行以下内容:
for f in *.java ; do
tac "$f" | awk '/^public void/ {v=$3; sub(/\(\)/,"",v)}
/^@Prop\(name = \"Operation\"/ {sub(/search_pattern/,v,$0)}
1' |tac > temp && mv temp "$f"
done
最后一个mv
命令会在没有提示的情况下替换该文件,因此您必须在运行之前进行测试。