“grep | sed”命令忽略某些文件

问题描述 投票:0回答:1

我正在尝试在项目中全局重命名 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。

有人知道为什么会发生这种情况吗?

bash shell unix
1个回答
0
投票

按照@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
,以确保管道一次只传送一行种子命令。

© www.soinside.com 2019 - 2024. All rights reserved.