如何在目录中的所有文件的头部插入一行?

时间:2013-10-30 17:27:14

标签: vim editing

我在目录中有多个文件。我想在文件的头部插入相同的行 - 如:

#!/usr/bin/python
#author: Alastor

我如何做到这一点?我在想vim可能有什么东西,但我对其他选择持开放态度。我也可以在嵌套文件夹中递归执行此操作吗?

此外,有没有办法获取文件的名称并将其放在那里,即:

#!/usr/bin/python
#author: Alastor
#filename: asdf.py

2 个答案:

答案 0 :(得分:2)

尝试使用findsed

静态标头

find -type f -name '*.py' -exec sed -i '1i#!\/usr\/bin\/python\n#author: Prashant\n' {} \;

带文件名的动态标头

find -type f -name '*.py' -exec sh -c 'sed -i "1i#\!\/usr\/bin\/python\n#author: Prashant\n#filename: `basename $0`\n" $0' {} \;

简短说明

find命令将在当前目录中递归找到所有 * .py 文件。

-exec选项会将find命令的每个输出作为参数传递给以下命令。 (这里sed

使用sed选项的

-i用于使用1i在第1行的已找到文件中插入所需内容。

带参数sh -c

$0用于使用basename打印文件名

答案 1 :(得分:2)

在Vim:

:args **/*.py
:argdo 0put="#!/usr/bin/python"|put="#author: Prashant"

(编辑)

这个解决了您的新要求:

:args **/*.py
:argdo execute "let @q = '#!/usr/bin/python\n#author: Alastor\n#filename: " . expand('%') . "'|0put=@q"

这个方法使用了一种不同的,更直观的方法:宏!

:args **/*.py
qq
gg
O#!/usr/bin/python<CR>#author: Alastor<CR>#filename: <C-r>%
<Esc>
q
:argdo @q

无论您使用何种方法,都需要在以后将文件写入磁盘:

:wa