我的原始文件如下:
import a.b.c.io.AA
import a.b.c.util.io.anc;
我想在特定单词 io 之前添加 util ,该单词之前不是 util 。
这是我预期的输出文件:
import a.b.c.io.AA
import a.b.c.util.io.anc;
我尝试以下脚本:
find . -name "a.java"|xargs sed -ie 's/import.*[^u][^t][^i][^l].io.*/import.*.util.io*/' but dont get what I want.
答案 0 :(得分:0)
您可以使用b
命令模拟简单的if-else条件
$ sed -e '/util\.io/b' -e 's/\.io/.util&/' ip.txt
import a.b.c.util.io.AA
import a.b.c.util.io.anc;
b
是跳转到给定标签的分支指令-如果未提供标签,则跳过sed脚本的其余部分并开始下一个周期/util\.io/b
(如果该行包含util.io
,则开始下一个循环s/\.io/.util&/
对于其余各行,请执行此替换
/^import/ s/\.io/.util&/
仅替换以import
开头的行
另外,您可以将-exec
与find
一起使用,而不是xargs
-这是命令的构建目的,是对找到的文件进行操作
find . -name '*.java' -exec sed -i <...> {} +
某些版本可能不支持{} +
,在这种情况下,请使用{} \;
。另请参见Understanding the -exec option of find
答案 1 :(得分:0)
能否请您尝试以下操作,如果有帮助,请告诉我。
awk '/io/ && !/util\.io/{sub(/io/,".util.&");} 1' Input_file
如果您想将输出保存到Input_file本身,则也将> temp_file && mv temp_file Input_file
附加到上述代码中。