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