2009-08-05 5 views

risposta

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

Si noti che la semantica sed -i variano a seconda sapore Unix, in modo da controllare la vostra man sed. Questo è scritto per il gusto GNU.

+0

wow .. quasi mi fa venir voglia di imparare sed. Grazie mille! – Learning

1

questo è un AWK uso piuttosto che il 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

Io voto * mai * di raccomandare 'perl -i' senza un backup:' perl -i.bak'. È facile e puoi rimuovere facilmente i backup una volta che sei sicuro di non aver sbagliato la modifica. – Telemachus

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

Il close(ARGV) è necessario per riavviare il contatore linea di $. all'inizio di ogni file; per impostazione predefinita, conta le righe tra i file.

+1

Non pensi che valga la pena di fare '-i.bak' per proteggerti da errori di battitura che cancellano un sacco di dati? (Immaginate di dimenticare '-p'.) – Telemachus

+0

@Telemachus: quando faccio un'intera directory, preferisco copiare prima l'intera directory (ad esempio cp -a dir {,. Save}); quindi posso ripristinarlo se necessario. – ysth