J'ai besoin d'ajouter des balises PHP entourant un fichier. Il est facile de les ajouter en utilisant
find . -exec echo "?>" >> '{}' \;
mais comment puis-je ajouter le tag <?php
?
text-processing
sed
Gilles 'SO- arrête d'être méchant'
la source
la source
sed
, et il permet d'ajouter un suffixe de sauvegarde.-i
n'est pas portable, la syntaxe diffère entre les implémentations et elle casse les liens symboliques. Vous feriez mieux d'utiliser une application réellement conçue pour éditer des fichiers.Vous pouvez utiliser un
AWK
filtre comme celui-ci,Où
PREFIX
est votre chaîne de préfixe php.la source
Je ne peux pas encore laisser de commentaire, mais pour tout faire en une seule étape:
la source
Vous pouvez le faire avec un perl one-liner:
Le mode
-0777
force le fichier slurping, donc tout le fichier est lu sur une seule ligne.-p
active le bouclage.-i
permet la modification sur place du fichier.^
indique le début d'une ligne.Mise à jour: comme indiqué dans les commentaires, vous pouvez choisir de générer automatiquement une sauvegarde en utilisant
-i.bak
au lieu de-i
. Cela offre une sécurité supplémentaire en cas d'erreurs dans votre commande. L'argument to-i
devient le suffixe de la sauvegarde.Lors de la mise à jour d'un groupe de fichiers, vous pouvez exécuter la commande avec
-i.backup${RANDOM}
, vérifier que tous les fichiers sont correctement mis à jour, puis supprimer tous les fichiers avec cette extension.la source
-i
indicateur sans suffixe, veuillez avertir les lecteurs que cela signifie que vous n'obtenez aucune sauvegarde . Pour quelques caractères de plus (-i.bak
), vous obtenez une sauvegarde au cas où votre one-liner comprend une faute de frappe. Une faute de frappe assez simple (par exemple, en oubliant le-p
drapeau) peut gâcher votre journée entière autrement.sed
sert à éditer des flux - un fichier n'est pas un flux. Utilisez un programme conçu à cet effet, commeed
ouex
. L'-i
option tosed
n'est pas seulement non portable, elle cassera également tous les liens symboliques que vous pourriez rencontrer, car elle les supprime essentiellement et les recrée, ce qui est inutile.la source
ed
à cette fin, montrez-le dans votre réponse.Une alternative à ce que vous avez écrit pour ajouter quelque chose à la fin de chaque fichier du répertoire (in
bash
):bien que j'aime votre
find
one-liner :)la source
$FNAME
devrait être$fname
- par convention, nous capitalisons les variables d'environnement (PAGER, EDITOR, SHELL, ...) et les variables internes du shell (BASH_VERSION, RANDOM, ...). Tous les autres noms de variables doivent contenir au moins une lettre minuscule. Cette convention évite de remplacer accidentellement les variables environnementales et internes.Il y a le moyen simple
la source