我正在尝试在项目中全局重命名 Java 包。 我创建了一个名为 refactoring-script.sh 的 bash 脚本,我尝试使用以下命令全局搜索替换包名称:
grep -lr "old.package.name" --exclude="refactoring-script.sh" . | xargs sed -i '' "s#old.package.name#new.package.name#g"
它在 378 个文件中产生了超过 20000 个字符串替换,但使用 Visual Studio 在项目中进行全局搜索时,我仍然在 581 个文件中找到了字符串 old.package.name 1977 次。
例如,命令完全忽略文件 README.me,旧的包名称仍然保留在那里。
我正在使用 MacOS Sequoia 15.1 和配备 Apple M1 的 Mac Mini。
有人知道为什么会发生这种情况吗?
按照@GordonDavisson 的建议回显 sed 命令后,我想出了这个解决方案:
grep -lr "old.package.name" --exclude="refactoring-script.sh" . | xargs -L 1 sed -i '' "s#old.package.name#new.package.name#g"
关键是
-L 1
,以确保管道一次只传送一行种子命令。