Pravděpodobně bych použil sed
pro tuto práci:
line=3
sed -e "${line}r file2" file1
Pokud chcete přepsat file1
a máte GNU sed
, přidejte -i
volba. V opačném případě zapište do dočasného souboru a poté zkopírujte/přesuňte dočasný soubor přes originál a podle potřeby vyčistěte (to je trap
věci níže). Poznámka:zkopírování dočasných souborů přes soubor zachová odkazy; přesun ne (ale je rychlejší, zvláště pokud je soubor velký).
line=3
tmp="./sed.$$"
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
sed -e "${line}r file2" file1 > $tmp
cp $tmp file1
rm -f $tmp
trap 0
Jen pro zábavu a jen proto, že všichni milujeme ed
, standardní editor, zde je ed
verze. Je to velmi efektivní (ed
je pravý textový editor)!
ed -s file2 <<< $'3r file1\nw'
Pokud je číslo řádku uloženo v proměnné line
pak:
ed -s file2 <<< "${line}r file1"$'\nw'
Jen abych potěšil Zacka, tady je jedna verze s menším bashismem, pro případ, že nemáte rádi bash (osobně nemám rád dýmky a podskořápky, preferuji herestringy, ale hej, jak jsem řekl, to je jen pro potěšení Zacka):
printf "%s\n" "${line}r file1" w | ed -s file2
nebo (abych potěšil Sorpigal):
printf "%dr %s\nw" "$line" file1 | ed -s file2
Jak zmiňuje Jonathan Leffler v komentáři, a pokud máte v úmyslu použít tuto metodu ve skriptu, použijte heredoc (obvykle je to nejúčinnější):
ed -s file2 <<EOF
${line}r file1
w
EOF
Doufám, že to pomůže!
P.S. Neváhejte zanechat komentář, pokud máte pocit, že se potřebujete vyjádřit k tomu, jak řídit ed
, standardní editor.
cat file1 >>file2
připojí obsah souboru1 k souboru2.
cat file1 file2
zřetězí soubor1 a soubor2 a odešle výstup do terminálu.
cat file1 file2 >file3
vytvoří nebo přepíše soubor3 zřetězením souborů1 a soubor2
cat file1 file2 >>file3
připojí zřetězení souboru1 a souboru2 na konec souboru3.
Upravit :
Pro trunking file2 před přidáním file1:
sed -e '11,$d' -i file2 && cat file1 >>file2
nebo pro vytvoření 500řádkového souboru:
n=$((500-$(wc -l <file1)))
sed -e "1,${n}d" -i file2 && cat file1 >>file2