GNU/Linux >> Linux の 問題 >  >> Linux

行の範囲を行の範囲(sedまたはその他)に置き換えますか?

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に置き換えます。 file13,5file2から 。

今までしかできなかったのは、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。 🙂


Linux
  1. sed のようなテキストを python に置き換えるにはどうすればよいですか?

  2. bashで単語を別の単語に置き換える

  3. sed 特定の行にスペースを含む挿入行

  1. sed - 一致後に X 行の後に行を挿入する

  2. sedを使用して、ファイル内の行の範囲内のテキストを検索して置換します

  3. MAC アドレスを UUID に置き換えます

  1. Sedは改行文字を置き換えることができますか?

  2. 値が欠落している新しい行を挿入しますか(na)?

  3. 重複、わずかな変更、テキストファイルの数行?