sed以排除目录

sed以排除目录,sed,Sed,我尝试使用*作为文件名同时用sed替换许多文件。然而,它也尝试处理目录,并给出错误和终止。有一种简单的方法可以克服这个问题吗?我不确定您在这里是如何使用sed的,但是在UNIX中只处理常规文件的常规方法是使用find命令,类似于: find . -type f -exec sed 's/Hello/Goodbye/g' {} ';' 该类型将您限制为常规文件,而不是目录、FIFO或任何其他类型的文件系统 如果在您的系统上运行man find,您将看到大量其他选项可供使用。对于springboa

我尝试使用*作为文件名同时用sed替换许多文件。然而,它也尝试处理目录,并给出错误和终止。有一种简单的方法可以克服这个问题吗?

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

find . -type f -exec sed 's/Hello/Goodbye/g' {} ';'
该类型将您限制为常规文件,而不是目录、FIFO或任何其他类型的文件系统

如果在您的系统上运行
man find
,您将看到大量其他选项可供使用。

对于springboard on answer,我将此别名拼凑在一起,并将其作为“递归sed”添加到我的bash别名中:
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

我对linux/unixshell命令还是相当陌生,为什么当我运行这个命令时,它会将许多文件的内容垃圾邮件发送到我的屏幕上,但从不更改任何内容?@TheUnholy,没错。这个答案的目的是展示如何使用
find
处理文件而不是目录。
find
命令(在本例中是一个简单的
sed
命令)的“有效负载”可以根据您的需要进行修改。