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
inの行をfromの行file1
に置き換えます。3,5
file2
これまで私ができた唯一のfile2
ことは
$ sed -n 3,5p file2
しかし、それはそれらをそこに連れて行くのに役立ちませんfile1
。可能ですかsed
?そうでない場合は、同様のツールを使用できますか?
ベストアンサー1
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行を10、11、12行に置き換えますfile2
。
修正する:@MiniMaxさんありがとうございます指摘cat
次のようにすると、このような状況やプロセスの交換を回避できます。
{ sed -n '1,5p' file1; sed -n '10,12p' file2; sed -n '9,$p' file1; } > file1.tmp && mv file1.tmp file1
結局キスしてください。 :)