2009-08-05 6 views

Répondre

13
sed -i -e '2iYour line here' /dir/* 

Notez que la sémantique sed -i varient selon la saveur Unix, afin de vérifier votre man sed. Ceci est écrit pour la saveur GNU.

+0

wow .. presque me donne envie d'apprendre sed. Merci beaucoup! – Learning

1

c'est une utilisation AWK plutôt que le sed,

for i in $(<list_of_files) 
do 
    awk '{if (FNR!=2) print $0; 
      else { print "new line"; print $0}}' $i > ${i}.tmp; 
    mv ${i}.tmp $i; 
done 
0
ls | xargs --replace=foo perl -i -ne 'print; print "second line text\n" unless $x++;' foo 
+0

Je vote * jamais * pour recommander 'perl -i' sans sauvegarde:' perl -i.bak'. C'est facile, et vous pouvez facilement supprimer les sauvegardes une fois que vous êtes sûr de ne pas avoir mal traité votre montage. – Telemachus

2
perl -pi -we'print "extra line\n" if $. == 3; close ARGV if eof' files 

Le close(ARGV) est nécessaire de redémarrer le compteur de ligne $. au début de chaque fichier; par défaut, il compte les lignes entre les fichiers.

+1

Ne pensez-vous pas qu'il vaut la peine de faire '-i.bak' pour vous protéger d'une faute de frappe qui efface beaucoup de données? (Imaginez que vous oubliez '-p'.) – Telemachus

+0

@Telemachus: lorsque je fais un répertoire entier, je préfère copier tout le répertoire en entier (par exemple cp -a dir {,. Save}); alors je peux le reprendre si nécessaire. – ysth

Questions connexes