GNU/Linux >> Znalost Linux >  >> Linux

Nahradit rozsah řádků rozsahem řádků (sed nebo jiné)?

Mám dva textové soubory:file1 a file2 , oba s několika řádky.

$ 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

Chtěl bych nahradit rozsah řádků file1 (z řádku 1_start na řádek 1_end ) s rozsahem řádků file2 (z řádku 2_start na řádek 2_end ).

Například nahraďte řádky 2,4 v file1 s řádky 3,5 ze file2 .

Doposud jsem mohl pouze extrahovat potřebné řádky z file2 s

$ sed -n 3,5p file2

Nepomůže však jejich umístění do file1 . Je to možné pomocí sed ? Pokud ne, je to možné pomocí podobného nástroje?

Přijatá odpověď:

sed může vytisknout daný rozsah řádků něčím takovým:

sed -n 'X,Yp' filename

Kde X je první řádek v rozsahu a Y je poslední řádek, oba včetně. -n říká sed netisknout nic, pokud to není výslovně řečeno, a to je to, co p sledování rozsahu ano.

Takže to můžete snadno zavolat třikrát, připojit k dočasnému souboru a pak tento soubor přesunout kamkoli chcete. Můžete je také všechny kombinovat pomocí cat a zpracujte substituci, jak ukazuje tento příklad (používám čísla řádků, která jsem právě vytáhl z ničeho; $ je poslední řádek v souboru):

cat <(sed -n '1,5p' file1) <(sed -n '10,12p' file2) <(sed -n '9,$p' file1) > file1.tmp && mv file1.tmp file1

Zde bychom nahradili řádky 6, 7 a 8 v file1 s řádky 10, 11 a 12 ze file2 .

Aktualizace: Děkujeme @MiniMax za upozornění na cat a substituci procesu se lze vyhnout provedením následujícího:

{ sed -n '1,5p' file1; sed -n '10,12p' file2; sed -n '9,$p' file1; } > file1.tmp && mv file1.tmp file1

Koneckonců KISS. 🙂


Linux
  1. Jak nahradit text podobný sedu pythonem?

  2. Nahraďte slovo jiným v bash

  3. sed vložte řádek s mezerami na konkrétní řádek

  1. sed - vložit řádek za X řádků po shodě

  2. Jak rekurzivně nahradit znaky sed?

  3. nahradit řádky v jednom souboru řádky v jiném číslem řádku

  1. Může Sed nahradit nové řádkové znaky?

  2. Vložit nové řádky s chybějícími hodnotami (ne)?

  3. Duplicitní, s několika malými změnami, několika řádky v textovém souboru?