Je dois insérer une ligne avec du texte spécifique sur la deuxième ligne (déplacement ainsi les autres lignes dans le fichier) de centaines de fichiers dans un répertoire. Tout conseils unix rapides sur la façon dont cela peut être fait? P>
4 Réponses :
sed -i -e '2iYour line here' /dir/* Note that sed -i semantics vary by Unix flavor, so check your man sed. This is written for the GNU flavor.
Ceci est un awk code> Utilisez plutôt que le
sed code>,
ls | xargs --replace=foo perl -i -ne 'print; print "second line text\n" unless $x++;' foo
Je vote jamais i> recommander perl -i code> sans sauvegarde:
perl -i.bak code>. C'est facile et vous pouvez facilement supprimer les sauvegardes une fois que vous êtes sûr de ne pas avoir de mal à modifier.
perl -pi -we'print "extra line\n" if $. == 3; close ARGV if eof' files The close(ARGV) is necessary to restart the line counter $. at the beginning of each file; by default, it counts lines across files.
Ne pensez-vous pas que cela vaut la peine de faire -i.bak code> pour vous protéger d'une faute de frappe de nombreuses données? (Imaginez simplement que vous oubliez
-p code>.)
@Telemachus: Lorsque vous effectuez un répertoire entier, je préfère copier le répertoire entier en premier (par exemple, cp -a dir {,. Save}); Ensuite, je peux le remettre si nécessaire.