Bash脚本查找模式并替换为filename

时间:2015-01-26 10:16:24

标签: bash shell sed xargs

我正在尝试查找特定文件夹的所有文件,其中包含文本“TO_BE_REPLACED”,我想用不带字符Impl的文件名替换此字符串。 我的意思是,有一个名为MyServiceImpl的文件,文本为“TO_BE_REPLACED”,我想用文本“MyService”替换它。 我怎么能做到这一点?我尝试了这种方式没有结果:

find src/main/java/com/shn/*/server/service/impl/ -type f -print0 | xargs -0 sed -i "" "s/TO_BE_REPLACED/<filename>/g"

2 个答案:

答案 0 :(得分:0)

你可以这样做:

while read -r filename
do
  sed -i "s/TO_BE_REPLACED/MyService/g" $filename
done < <(find "src/main/java/com/shn/*/server/service/impl/" -type f)

答案 1 :(得分:0)

如果你有GNU Parallel&gt; = 20140822:

find . -type f | parallel -q sed -i "" -e 's/TO_BE_REPLACED/{=s:.*/::;s/Impl$//=}/g' {}

这里的技巧是使用perl表达式从.../MyServiceImpl转到MyService并在sed中使用它。

相关问题