2つのテキストファイルがあります:file1 およびfile2 、両方とも数行あります。
$ cat file1
line one
line two
line three
line four
line five
$ cat file2
line A
line B
line C
line D
line E
line F
範囲に置き換えたい file1の行数 (1_start行から 1_endの行に )範囲 file2の行数 (2_start行から 2_endの行に 。
たとえば、行を2,4に置き換えます。 file1内 3,5行 file2から 。
今までしかできなかったのは、file2から必要な行を抽出することです。 と
$ sed -n 3,5p file2
しかし、それはそれらをfile1に入れるのに役立ちません 。 sedで可能ですか? ?そうでない場合は、同様のツールで可能ですか?
承認された回答:
sed 次のような行の特定の範囲を印刷できます:
sed -n 'X,Yp' filename
ここでX 範囲の最初の行であり、Y 両方を含む最後の行です。 -n sedに通知します 明示的に指示されない限り、何も印刷しないでください。それがpです。 範囲に従うことはありません。
したがって、これを3回簡単に呼び出して一時ファイルに追加し、そのファイルを任意の場所に移動できます。 catを使用してそれらをすべて組み合わせることができます この例が示すように、プロセス置換(私は薄い空気から引き出したばかりの行番号を使用しています; $ ファイルの最後の行です):
cat <(sed -n '1,5p' file1) <(sed -n '10,12p' file2) <(sed -n '9,$p' file1) > file1.tmp && mv file1.tmp file1
ここでは、file1の6、7、8行目を置き換えます。 file2の10、11、12行目 。
更新: そのcatを指摘してくれた@MiniMaxに感謝します プロセス置換は、次のようにすることで回避できます。
{ sed -n '1,5p' file1; sed -n '10,12p' file2; sed -n '9,$p' file1; } > file1.tmp && mv file1.tmp file1
結局のところ、KISS。 🙂