【问题标题】:Find and replace key word for all files (Mac OS)查找和替换所有文件的关键字 (Mac OS)
【发布时间】:2021-04-30 03:02:51
【问题描述】:

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

我尝试使用以下答案: How to do a recursive find/replace of a string with awk or sed?

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


由于我使用的是 Mac(来自:sed -i command for in-place editing to work with both GNU sed and 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 上递归地遍历不同字典中的所有文件以替换柳树的所有实例?

【问题讨论】:

    标签: bash sed


    【解决方案1】:
    grep -rl willow . | xargs sed -i -e '' 's/willow/oak/g'
    

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

    您误读或误解了产生该想法的答案,从而产生了额外的问题而不是解决问题。使用该命令,MacOS sed 不仅将-e 解释为备份文件的扩展名,将's/willow/oak/g' 解释为输入文件名,而且还将'' 解释为(零长度)文件名。后者是您的错误消息的内容。

    我也试过了:

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

    根据its manual page,如果您将-i-f 选项与Mac sed 一起使用,那么如果您想通过命令行指定命令,则必须使用-e .也就是说,你想要这个:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 2013-10-07
      相关资源
      最近更新 更多