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。 🙂