Ho bisogno di inserire una linea con testo specifico sulla seconda riga (spostando così le altre righe nel file) di centinaia di file in una directory. Qualche consiglio rapido su Unix su come si può fare?Come inserisco una riga in una riga specifica in più file su Unix?
risposta
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.
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
ls | xargs --replace=foo perl -i -ne 'print; print "second line text\n" unless $x++;' foo
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
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.
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
@Telemachus: quando faccio un'intera directory, preferisco copiare prima l'intera directory (ad esempio cp -a dir {,. Save}); quindi posso ripristinarlo se necessario. – ysth
wow .. quasi mi fa venir voglia di imparare sed. Grazie mille! – Learning