sed排除目录

时间:2010-11-04 07:10:09

标签: sed

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

2 个答案:

答案 0 :(得分:10)

我不确定你是如何在这里使用sed但是在UNIX中仅处理常规文件的常规方法是使用find命令,类似于:

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

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

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

答案 1 :(得分:0)

要按paxdiablo's回答跳板,我将这个别名拼凑在一起,然后将其添加到我的bash别名中,以及#39;递归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