我有很多java源文件,我想在我的项目中的每个java文件中将代码块更改为另一个代码块。
e.g。 我的项目有大约300个java源文件,每个文件都有这个代码块
while (p.getCurrentToken() != JsonToken.END_OBJECT) {
p.nextToken();
field = p.getCurrentName();
obj.populateFromJsonString(field, p);
}
我想将此代码块替换为
while (p.nextToken() != null) {
field = p.getCurrentName();
if(field!=null){
obj.populateFromJsonString(field, p);
}
}
在所有java文件中。代码块中的对象obj
对于不同的文件是不同的
我知道这可以通过使用sed和awk进行文字处理来完成。我正在考虑编译器读取和解析java源文件的方式的替代解决方案。可能有一些基于这种方式的应用程序来解决我的问题。
请分享方式或申请来解决这个问题。基于sed / awk的解决方案也很受欢迎。
答案 0 :(得分:1)
最好使用IDE来执行此操作,但如果您真的想使用sed,请将其放在名为j.sed的文件中
/while (p\.getCurrentToken() != JsonToken\.END_OBJECT) {/{
:loop
n
/}/b
s/field = p\.getCurrentName();/if (field!=null) {/
s/p\.nextToken();/field = p\.getCurrentName();/
s/...\.populateFromJsonString(field, p);/\t&\n\t}/
b loop
}
然后在命令行中使用
find . -type f -name '*.java' -exec sed -i.bak -f j.sed {} \;
这将输入:
while (p.getCurrentToken() != JsonToken.END_OBJECT) {
p.nextToken();
field = p.getCurrentName();
obj.populateFromJsonString(field, p);
}
输出:
while (p.getCurrentToken() != JsonToken.END_OBJECT) {
field = p.getCurrentName();
if (field!=null) {
obj.populateFromJsonString(field, p);
}
}
-i.bak将在适当位置编辑并将备份存储为filename.java.bak
答案 1 :(得分:-2)
这个怎么样
$ searchvar=`cat searchblock.txt`
$ replvar=`cat replblock.txt`
$ sed -i ":loop; $! N; tloop; s/$searchvar/$replvar/g" *.java
在searchblock.txt
中你将把inputblock放在哪里,用*.java
你将捕获文件夹中的所有java文件
通知`
不是'
在测试-i
就地编辑时要小心,您可以尝试使用备份文件