我想对层次结构中具有相同名称(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
)