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