tmp1
いくつかの行を含むtmpという2つのファイルがありますtmp2
。
tmp1 ファイル、
1c\
datafile no. 23
2c\
datafile is ok
tmp2ファイル、
3c\
datafile no. 24
4c\
datafile is ok
ファイル(名前wrong_file
)があり、tmpファイルでそのファイルのエントリを変更したいと思います。
datafile no. 32
datafile is ok
datafile no. 42
datafile is ok
私の出力ファイル(modified_file
)は次のようになります。
datafile no. 23
datafile is ok
datafile no. 24
datafile is ok
手動で実行する代わりに、最後のtmpファイルとして実行し、tmpファイルのデータを最終ファイル(出力)に書き込むforループを使用したいと思います。
頑張りましたが、
sed -f tmp1 wrong_file > file1
sed -f tmp2 file1 > modified_file
答え1
私はあなたがこれを行うことができると確信しています:
cat ./tmp[12] | sed -f - ./wrong_file >outfile
sed
少なくともすべてのスクリプト指示が行番号にのみ適用される場合、問題は発生しません。スクリプトを個別に適用する必要はありません。すべて一緒に接続し、スクリプトをすぐに実行できます。
しかし、これを行う必要がありますが、これは努力が重複するという意味です。ここsed
一時ファイルを最初に作成せずに、代わりに入力から変更する必要がある行を検索してから、ストリームのすべての内容を一度sed
に最終スクリプトに渡すスクリプトのコピーです。
{ sed '/^#\.tid\.setnr/!d;=;g;G' |
paste -d'c\\\n' - - - ./addfile
} <./mainfile | sed -f - ./mainfile
出力は以下に基づいているため、ここのサンプルデータとは異なります。その他の問題。ただし、修正スクリプトの完全な作成を防ぎ、すべての編集コマンドをsed
すぐに実行できるプロセスに送信します。
sed
通常、プロセスは編集入力も処理する準備ができているため、スクリプト入力も処理する準備ができていると考えることができます。 -