9

我试图编写一个脚本来将商标头添加到我的 .cpp 文件中。我的解决方案如下。

cat trademark.txt test.cpp > new_test.cpp && mv new_test.cpp test.cpp

但是,想知道是否有更好的方法来做到这一点。

4

3 回答 3

3

您可以像这样使用 awk:

awk 'NR==FNR && !h {print;h=1;} NR!=FNR{print}' headerFile mainFile > tmpFile
mv tmpFile mainFile

使用 vim/vi:

vim +'0r headerFile|wq' mainFile 2>/dev/null

使用 GNU sed:

sed -i.bak -e '2{x;G};1{h;rheaderFile' -e 'd}' mainFile

使用非 GNU sed:

HDR=$(head -1 headerFile) && sed -i.bak "1s/^/$HDR/" mainFile
于 2013-07-17T11:46:54.100 回答
3

您已经接受了答案,但我会建议另一种方法:

sed -i -e '1r trademark.txt' -e '1{x;d;};2{H;g;}' test.cpp 
于 2013-07-17T12:45:35.903 回答
0

如果您使用的是 vim,请查看ultisnips。它可以做到这一点,甚至更多

例如,我定义了以下代码片段来将公共域标头添加到文件中:

snippet pd "Public domain dedication" b
#
# Author: ${1:Roland Smith} ${2:<myemail@mydomain.com>}
# \$Date: `!v strftime("%F %T %z")` \$
#
# To the extent possible under law, $1 has waived all copyright and
# related or neighboring rights to `!v expand('%:t')`. This work is published 
# from the Netherlands. See http://creativecommons.org/publicdomain/zero/1.0/ 

endsnippet

要使用这个片段,我pd在 vim 的行首插入并点击<tab>. 这会扩展代码段,在标签中填写当前日期$Date$,并填写文件名(使用expand)。然后它会突出显示作为第一个变量的作者的姓名,允许我在必要时更改它。这会自动更改该变量的所有其他实例。使用<ctrl>j将我带到以下变量,作者的电子邮件地址,如果需要,也可以更改。

您可以使用 vimscript 命令(在引号之间并由 前置!v)。如果你的 vim 是用 Python 支持编译的,你也可以使用 Python 代码和!p.

于 2013-07-21T12:18:30.897 回答