【发布时间】:2011-05-04 22:04:03
【问题描述】:
我尝试使用 * 作为文件名一次用 sed 替换多个文件。但是它也尝试处理目录,并给出错误并终止。有没有简单的方法来克服这个问题?
【问题讨论】:
标签: sed
我尝试使用 * 作为文件名一次用 sed 替换多个文件。但是它也尝试处理目录,并给出错误并终止。有没有简单的方法来克服这个问题?
【问题讨论】:
标签: sed
我不确定如何您在此处使用sed,但在 UNIX 中仅处理常规文件的常规方法是使用 find 命令,例如:
find . -type f -exec sed 's/Hello/Goodbye/g' {} ';'
该类型将您限制为常规文件,而不是目录或 FIFO 或任何其他类型的文件系统魔法。
如果您在系统上运行 man find,您会看到许多其他可以使用的选项。
【讨论】:
find 来处理文件而不是目录。 find 命令的“有效负载”(在这种情况下是一个简单的sed 命令)可以根据您的需要进行修改。
为了跳板 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
【讨论】: