2009-08-05 3 views

答えて

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

sed -iセマンティクスはUnixの味によって異なりますので、あなたのman sedを確認することに注意してください。これはGNUフレーバ用に書かれています。

+0

うわー..ほとんど私がsedを学びたい。本当にありがとう! – Learning

1

これはclose(ARGV)各ファイルの先頭にラインカウンタ$.を再起動する必要がなく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

私は*絶対に*バックアップせずに 'perl -i'をお勧めします:' perl -i.bak'。簡単ですが、編集が間違っていないことを確認したら、簡単にバックアップを削除できます。 – Telemachus

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

よりAWK使用です。デフォルトでは、ファイル間の行を数えます。

+1

非常に多くのデータを消し去るのを防ぐために '-i.bak'を行う価値があるとは思わないのですか? (単に '-p'を忘れると想像してください) – Telemachus

+0

@Telemachus:ディレクトリ全体を扱うときは、ディレクトリ全体を最初にコピーする方がいいです(例:cp -a dir {、。save})。必要に応じて私はそれを戻すことができます。 – ysth