ディレクトリ内の何百ものファイルの2行目に特定のテキストを含む行を挿入して(ファイル内の他の行を移動させる)必要があります。どのようにそれを行うことができるかについての迅速なUnixのヒント?Unix上の複数のファイルで特定の行に行を挿入するにはどうすればよいですか?
答えて
sed -i -e '2iYour line here' /dir/*
sed -i
セマンティクスはUnixの味によって異なりますので、あなたのman sed
を確認することに注意してください。これはGNUフレーバ用に書かれています。
これは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
ls | xargs --replace=foo perl -i -ne 'print; print "second line text\n" unless $x++;' foo
私は*絶対に*バックアップせずに 'perl -i'をお勧めします:' perl -i.bak'。簡単ですが、編集が間違っていないことを確認したら、簡単にバックアップを削除できます。 – Telemachus
perl -pi -we'print "extra line\n" if $. == 3; close ARGV if eof' files
よりAWK
使用です。デフォルトでは、ファイル間の行を数えます。
非常に多くのデータを消し去るのを防ぐために '-i.bak'を行う価値があるとは思わないのですか? (単に '-p'を忘れると想像してください) – Telemachus
@Telemachus:ディレクトリ全体を扱うときは、ディレクトリ全体を最初にコピーする方がいいです(例:cp -a dir {、。save})。必要に応じて私はそれを戻すことができます。 – ysth
うわー..ほとんど私がsedを学びたい。本当にありがとう! – Learning