6
votes

Comment insérer une ligne à une ligne spécifique dans plusieurs fichiers sur UNIX?

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?


0 commentaires

4 Réponses :


13
votes
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.

0 commentaires

1
votes

Ceci est un awk Utilisez plutôt que le sed , xxx


0 commentaires

0
votes
ls | xargs --replace=foo perl -i -ne 'print; print "second line text\n" unless $x++;' foo

1 commentaires

Je vote jamais 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 de mal à modifier.



2
votes
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.

2 commentaires

Ne pensez-vous pas que cela vaut la peine de faire -i.bak pour vous protéger d'une faute de frappe de nombreuses données? (Imaginez simplement que vous oubliez -p .)


@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.