查找并替换所有文件的关键字(Mac OS)



我想在我的代码中将willow替换为oak。此更改需要对不同级别的多个文件进行。

我尝试使用以下答案:如何用awk或sed进行递归查找/替换字符串?

特别是,grep -rl willow . | xargs sed -i -e '' 's/willow/oak/g'


由于我使用的是Mac(来自:sed -i命令用于就地编辑以使用GNU sed和BSD/OSX),我使用了额外的-e ''命令。然而,我得到

s/willow/oak/g: No such file or directory


我也试过了:

grep -rl willow . | xargs sed -i '' 's/willow/oak/g'

(由于操作系统)给出:sed: RE错误:非法字节序列。


我如何递归地遍历Mac上不同字典中的所有文件来替换柳树的所有实例?

grep -rl willow . | xargs sed -i -e '' 's/willow/oak/g'

我使用了额外的-e "命令。

你误解了你得到那个想法的答案,制造了一个额外的问题,而不是解决一个问题。使用该命令,MacOSsed不仅将-e解释为备份文件的扩展名,将's/willow/oak/g'解释为输入文件名,而且还将''解释为(零长度)文件名。后者是您的错误消息的内容。

我也试过了:

grep -rl willow . | xargs sed -i '' 's/willow/oak/g'

根据其手册页,如果您在Macsed中使用-i-f选项,那么如果您想通过命令行指定命令,则必须使用-e。也就是说,你需要这样做:

grep -rl willow . | xargs sed -i '' -e 's/willow/oak/g'

-i指定一个空的备份扩展名,从而抑制备份文件的生成,并通过-e在命令行上指定sed命令。

最新更新