0

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

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

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

另外,有什么方法可以获取文件名并将其放入其中,即:

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

2 回答 2

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

sedwith-i选项用于在第 1 行找到的文件中插入所需的内容,使用1i.

sh -cwith 参数$0用于打印文件名使用basename

于 2013-10-30T17:36:19.337 回答
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
于 2013-10-30T17:37:48.060 回答