【问题标题】:sed to exclude directoriessed 排除目录
【发布时间】:2011-05-04 22:04:03
【问题描述】:

我尝试使用 * 作为文件名一次用 sed 替换多个文件。但是它也尝试处理目录,并给出错误并终止。有没有简单的方法来克服这个问题?

【问题讨论】:

    标签: sed


    【解决方案1】:

    我不确定如何您在此处使用sed,但在 UNIX 中仅处理常规文件的常规方法是使用 find 命令,例如:

    find . -type f -exec sed 's/Hello/Goodbye/g' {} ';'
    

    该类型将您限制为常规文件,而不是目录或 FIFO 或任何其他类型的文件系统魔法。

    如果您在系统上运行 man find,您会看到许多其他可以使用的选项。

    【讨论】:

    • 我对 linux/unix shell 命令还是很陌生,为什么当我运行它时,它会在我的屏幕上显示许多文件的内容,但从不改变任何内容?
    • @TheUnholy,没错。这个答案的目的是展示如何使用find 来处理文件而不是目录。 find 命令的“有效负载”(在这种情况下是一个简单的sed 命令)可以根据您的需要进行修改。
    【解决方案2】:

    为了跳板 paxdiablo's 答案,我将这个别名拼凑在一起,并将其添加到我的 bash 别名中作为“递归 sed”:rsed

    rsed() {
      [[ -z $2 ]] && echo "usage: ${FUNCNAME[0]} oldtext newtext" && return
      command find . -type f -exec sed -i "s/${1}/${2}/g" {} \;
    }
    

    结果:

    > cat test/file
    Hello how are you?
    > rsed "Hello how are you?" "Fine thanks"
    > cat test/file
    Fine thanks
    

    【讨论】:

      猜你喜欢
      • 2013-08-05
      • 1970-01-01
      • 2014-02-14
      • 2015-07-31
      • 2018-03-01
      • 2021-12-28
      • 2012-10-22
      • 2017-07-08
      相关资源
      最近更新 更多