将行附加到目录中所有文件的开头

将行附加到目录中所有文件的开头

我试图在目录中所有文件的开头添加两行。

我可以使用以下命令对单个文件执行此操作:

echo -e "% First Line\n% "$(date)"\n\n$(cat file1.txt)">file1.txt

如何在开头添加两行全部目录中的文件?

答案1

首先,你的命令:

echo -e "% First Line\n% "$(date)"\n\n$(cat file1.txt)">file1.txt

这是强烈不推荐。 如果您的文件包含任何反斜杠,您就会遇到麻烦。请阅读引用和命令替换。


对于单个文件,在文件开头插入行的推荐 POSIX 方法是:

printf '%s\n' 0a 'First line' '2nd line; 3rd line is empty' '' . x | ex file.txt

0a意思是“追加到第 0 行之后”。这是exPOSIX 文件编辑器(顺便说一句,也是编辑器的另一种形式)的命令vi。一行.本身结束追加。 x保存并退出。

要一次处理多个文件,请使用循环for和文件 glob:

for f in *.txt; do
  printf '%s\n' 0a '# This line heads all files' . x | ex "$f"
done

答案2

如果您的平台支持使用 进行就地编辑sed,请尝试类似的操作

sed -i "1i\\
First line\\
$(date)" *

不幸的是,这部分sed有点笨拙;我记得我很难从文档中找出精确的语法。

答案3

perl -i -lpe '
   $FNR++ or print "% First Line\n%", `date`, $\;
   $FNR = 0 if eof;
' *.txt

仅对于每个文件的第一行输入,我们打印所需的字符串。我们根据语句的要求将额外的换行符放入ORS $\中。printecho

相关内容