J'essaie d'insérer des informations de copie-droite au début de certains fichiers source. Je sais que, à l'aide de SRD de la manière suivante: insérerait le texte "certaines informations protégées par le droit d'auteur" au début de l'échantillon.txt. J'ai googlé Pour ce qui précède et n'a pas trouvé exactement ce que je cherchais. Toute aide sur ceci est la plus bienvenue. P> Merci. P> P>
J'ai besoin d'insérer du texte à partir d'un fichier au début de l'échantillon.txt. Y a-t-il un moyen dans la commande SED que je pourrais utiliser une commande chat code> pour le but ci-dessus, dites quelque chose comme ce qui suit?: P>
6 Réponses :
cat header.txt sample.txt > temp.txt mv temp.txt sample.txt
qui mettra en-tête sous un échantillon
Cela ajoutera Sample.Text to Header.txt. La commande est correcte. Après votre commentaire, j'ai encore essayé. Ça marche.
Vous pouvez le faire sur une ligne ... "Cat Header.txt exemplant.txt> temp.txt && mv temp.txt exemplant.txt" ... assez compréhensible une fois que vous l'avez utilisé une fois.
Si vous voulez vraiment le faire en utilisant SED CODE>:
INFO=$(cat header.txt) # read the contents of file headers.txt into var INFO
sed -i "1i$INFO" sample.txt # insert $INFO, use -i to change the file inplace
Je pense que cette méthode ne fonctionnerait pas si votre en-tête contient des chaînes que SED interprète comme une commande.
Tangens a raison, cela ne fonctionne pas. Le header.txt contient des informations sous la forme de commentaires de style C (/ * et * /) que sed interprète comme une commande.
Pourquoi ne pas faire cela l'inverse, par exemple Ajoute vos fichiers source à votre fichier de copyright?
La commande 'Cat' est effectivement courte pour "Concaténate", vous pouvez simplement dire P>
for f in *.c do cp $f /tmp cat copyright.txt /tmp/$f >$f done
Vous avez un problème de nettoyage majeur dans / TMP - et cela suppose que vous ne travaillez pas dans / TMP en premier lieu!
Pas vraiment, c'est quoi / TMP est pour. Si vous êtes heureux, vous venez de les rm, si vous n'êtes pas, vous avez garanti que vous pouvez annuler le changement.
Utiliser ED Editeur d'éditeur ED:
vi - +'0r header.txt|wq' sample.txt
Si vous avez GNU échantillon.txt doit être contenant au moins deux lignes. p> Cette méthode fonctionne même si Le fichier d'en-tête contient des caractères spéciaux à explication: p> EDIT: strong> J'ai supprimé une commande superflue de la version que j'ai initialement affichée. P> p> sed code>:
sed code>. p>
-i code> - Modifiez le fichier en place li>
-e code> - casser le script en sections - ceci est nécessaire dans ce cas pour délimiter la fin du nom de fichier d'en-tête (il pourrait également être délimité par une nouvelle ligne) li>
1 {h; code> - sur la première ligne du fichier (exemple.txt) Enregistrez-le pour tenir l'espace Li>
rheader.txt code> - lire dans le fichier d'en-tête (Header.txt) Li>
d} code> - Supprimer la première ligne d'origine du fichier à partir de l'espace de motif et le traitement final de la ligne 1 - Supprimer ici empêche une ligne vierge supplémentaire d'être insérée au début du fichier li>
2 {x; code> - lorsque la ligne 2 du fichier (Sample.txt) est lue, échangez-la dans l'espace enfoncé et envoie l'espace de maintien (contenant la ligne d'origine 1) dans l'espace de motif li>
g} code> - Ajoutez de l'espace de maintien sur la fin de l'espace de motif (qui contient maintenant des lignes d'origine 1 et 2) et un traitement complet de la ligne 2 li>
Comment allez-vous récursivement [avec condition] appliquer ceci à tous les fichiers d'un dossier? E.g: pour tous les sous-dossiers / fichiers dans. : Si le fichier est * .C, alors sed_cmd code> ??
@bny: Une manière (pour Bash 4): Shopt -s Globstar; pour le fichier dans ./**/*.c; faire [[-F $ Fichier]] && Sed_cmd; fait code>. Vous utiliseriez
"$ fichier" comme argument de nom de fichier à code> sed
. Vous pouvez utiliser code> trouver` et
xargs code> au lieu de la boucle
pour code> si, par exemple, vous utilisez une version précédente de bash.
Désolé d'utiliser toute une réponse - juste pour la mise en forme :) Fondamentalement, la même réponse de @Tangens, mais sans le fichier temporaire: notez les devis (< Code> " code>) Pour préserver les fins de la ligne et le fait que la concaténation code> CAT CO> est exécutée dans un sous-processus - il ne devrait donc pas y avoir la possibilité d'écraser un fichier (le acclamations! p> p> exemplant.txt code>) qui est ouvert pour la lecture. p>