我试图在目录中所有文件的开头添加两行。
我可以使用以下命令对单个文件执行此操作:
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 行之后”。这是ex
POSIX 文件编辑器(顺便说一句,也是编辑器的另一种形式)的命令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
$\
中。print
echo