2013-02-21 2 views
1

J'ai expérimenté avec sed au cours de la dernière heure et je n'arrive pas à le faire fonctionner. J'ai besoin de préfixer une ligne au début de tous les fichiers python dans un dossier, exemple de dossier "A".Utilisation de sed pour ajouter des chaînes à plusieurs fichiers

D'abord, je trouve tous les fichiers python en utilisant find:

find /A -maxdepth 1 -name "*.py" 

Cela montre une liste de fichiers de python. (Ça marche!)

Puis quand je effectuez les opérations suivantes comme suggéré par certains blogs et des tutoriels en ligne:

find /A -maxdepth 1 -name "*.py" -exec sed -i '1i # -*- coding: utf-8 -*-' 

Je reçois l'erreur suivante:

sed: 1: "/A/buttons.py": extra characters at the end of h command 

ce qui est commande h? Comment cela peut-il être fait correctement?

Soit dit en passant, je suis sous Mac OS X.

+0

Quelle est la ligne exacte que vous essayez d'ajouter? Cela a fonctionné pour moi: 'trouver A -maxdepth 1 -name" * .py "-exec sed -i '1i Texte à préfixer' {} \;' – aragaer

+0

Je veux ajouter: '# - * - codage: utf-8 - * - ' – Mark

+0

Fonctionne comme prévu. – aragaer

Répondre

2

Remplacez votre recherche/commande sed avec celui-ci:

find /A -maxdepth 1 -name "*.py" -exec sed -i.bak '1i\ 
Text to prepend 
' {} \; 
cd /A 
for i in *.py; do 
[[ $(sed q $i) != "# -*- coding: utf-8 -*-" ]] && sed -i.bak '1i\ 
# -*- coding: utf-8 -*- 
' $i 
done 
+0

Je ne veux pas de sauvegarde. Je veux qu'il écrit directement dans les fichiers python. – Mark

+0

La commande ci-dessus écrira directement dans vos fichiers '* .py' uniquement. Cela créera simplement des fichiers '* .bak' supplémentaires pour plus de sécurité. Si vous ne le voulez pas, supprimez '.bak'. – anubhava

+0

Je reçois une erreur dans le Terminal sur Mac OS X: sed: 1: "1i Texte à préfixer": commande que j'attends \ suivie de texte – Mark

0

utiliser les ci-dessous command.Its travailler à ma place

find /A -maxdepth 1 -name "*.py"| xargs perl -pi -e 'if($f==1 or $.==1){s/^/# -*- coding: utf-8 -*-\n/g;$f=0;}if(eof){$f=1}' 

si vous souhaitez utiliser exec dans find

find /A -maxdepth 1 -name "*.py" -exec perl -pi -e 'if($f==1 or $.==1){s/^/# -*- coding: utf-8 -*-\n/g;$f=0;}if(eof){$f=1}' {}/; 
Questions connexes