.cpp ファイルに商標ヘッダーを追加するスクリプトを作成しようとしていました。私の解決策は次のとおりです。
cat trademark.txt test.cpp > new_test.cpp && mv new_test.cpp test.cpp
ただし、これを行うより良い方法があるかどうかを知りたいと思っていました。
すでに回答を受け入れていますが、もう 1 つの方法を提案します。
sed -i -e '1r trademark.txt' -e '1{x;d;};2{H;g;}' test.cpp
次のように 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
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
。