削除する行が途方もなく多くなく、バージョンがひどく制限されているシステムで作業していない限りsed
(かつて、sed
HP-UXでは約100コマンドに制限されていました)、次を使用できます。
sed 's/$/d/' linenum.txt | sed -f - file.txt
これは、最初sed
の行番号を削除コマンドに変換し(問題の一部は不要なスラッシュであることに注意してください)、2番目のコマンドにsed
標準入力(-f -
)からスクリプトを読み取ってに適用するように指示しますfile.txt
。
上記はGNUで動作しますsed
; sed
Mac OS X 10.7.5のBSDでは動作しませんでした( sed: -: No such file or directory
)。システムで使用する前にテストしてください。
もちろん、bash
(bash
4.2では動作するが3.2では動作しない)の十分に新しいバージョンがある場合は、「プロセス置換」を使用して次の制限を回避できますsed
。
sed -f <(sed 's/$/d/' linenum.txt) file.txt
それでも機能しない場合は、最初のsed
コマンドの出力をファイルに書き込んでから、その(一時)ファイルをsed
スクリプトの名前として使用できます。ですから、それを行う方法はたくさんあります。ただし、3つを超えるプロセス(2回の実行sed
と1回の実行rm
)は贅沢です。一度だけ行う必要がある場合はおそらく問題ではありませんが、1分間に何度も行う必要がある場合は問題になる可能性があります。