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