script shell pour ajouter un en-tête d'un fichier

j'essayais d'écrire un script pour ajouter un en-tête de marque à mon .fichier cpp. ma solution est la suivante.

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

cependant, je voulais savoir s'il y avait une meilleure façon de le faire.

8
demandé sur anubhava 2013-07-17 15:33:11

3 réponses

Vous pouvez utiliser awk comme ceci:

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

à l'Aide de vim/vi:

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

utilisation de GNU sed:

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

Utilisation de la non-GNU sed:

HDR=$(head -1 headerFile) && sed -i.bak "1s/^/$HDR/" mainFile
3
répondu anubhava 2013-07-17 12:32:00

Vous avez déjà accepté une réponse, mais je vais suggérer une autre façon:

sed -i -e '1r trademark.txt' -e '1{x;d;};2{H;g;}' test.cpp 
1
répondu Beta 2013-07-17 13:28:31

Si vous utilisez vim, découvrez ultisnips. Il peut le faire, et beaucoup plus de.

par exemple, J'ai défini l'extrait suivant pour ajouter un en-tête de domaine public à un fichier:

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,  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

Pour l'utilisation de cet extrait, j'ai insérer pd au début d'une ligne dans vim et appuyez sur <tab>. Ceci élargit le fragment, en remplissant la date courante dans le $Date$ balise, et remplit le nom du fichier (à l'aide de expand). Il souligne ensuite le nom de l'auteur qui est la première variable, me permettant de la changer si nécessaire. Cela modifie automatiquement toutes les autres instances de cette variable. En utilisant <ctrl>j m'amène à la variable suivante, l'adresse e-mail de l'auteur, qui peut également être modifiée si vous le souhaitez.

vous pouvez utiliser les commandes vimscript (entre les guillemets et préprogrammées par !v). Si votre vim est compilé avec le support Python, vous pouvez aussi utiliser le code Python avec !p.

0
répondu Roland Smith 2013-07-21 12:18:30