在“查找”结果中的文件上运行命令

在“查找”结果中的文件上运行命令

我想对层次结构中具有相同名称(myfile)的多个文件进行一些更改。基本上我想用“我的新行”替换文件的第一行并删除第二行。我尝试这样做:

find . -name myfile -exec cat {} \; | sed -i -e '1 c my new line' -e '2d'

当 myfile 位于我执行命令的目录中时,它在层次结构的较低级别上工作,但在较高级别上不起作用。

我有以下错误消息:

sed: no input files
find: ‘cat’ terminated by signal 13

我怎样才能做到这一点? (我对 Unix 命令不是很了解。)重点是将 cat 的输出重定向到 sed 并修改已找到的相同文件。

答案1

跳过该cat命令可以解决您的问题:

find . -name myfile -exec sed -i -e '1 c my new line' -e '2d' {} \;

exec 中的参数{}是文件名,因此它sed -i针对每个文件运行命令。

答案2

您可以使用 sed 更改行,而无需find 先调用:

sed -i '1c my new line' **/myfile

尽管您可能需要先设置 globstar ( shopt -s globstar)

相关内容