Bash 脚本查找模式并替换为文件名
Bash script find pattern and replace by filename
我正在尝试查找特定文件夹中包含文本 "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"
你可以这样做:
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)
如果你有 GNU Parallel >= 20140822:
find . -type f | parallel -q sed -i "" -e 's/TO_BE_REPLACED/{=s:.*/::;s/Impl$//=}/g' {}
这里的技巧是使用 perl 表达式从 .../MyServiceImpl
到 MyService
并在 sed
.
中使用它
我正在尝试查找特定文件夹中包含文本 "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"
你可以这样做:
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)
如果你有 GNU Parallel >= 20140822:
find . -type f | parallel -q sed -i "" -e 's/TO_BE_REPLACED/{=s:.*/::;s/Impl$//=}/g' {}
这里的技巧是使用 perl 表达式从 .../MyServiceImpl
到 MyService
并在 sed
.