GNU/Linux >> Znalost Linux >  >> Linux

vložit obsah souboru do jiného (na konkrétní řádek souboru, který se odesílá)-BASH/LINUX

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

Linux
  1. Jak zobrazit konkrétní řádky souboru v příkazovém řádku Linuxu

  2. 4 nástroje ke stažení libovolného souboru pomocí příkazového řádku v Linuxu

  3. Zkopírujte obsah souboru do schránky v terminálu Linux

  1. Zkopírujte a vložte na příkazový řádek Linuxu pomocí xclip

  2. Pokročilé použití prohlížeče méně textových souborů v Linuxu

  3. Linux - grep od určitých řádků až do konce souboru

  1. Jak extrahovat soubor tar.gz v Linuxu pomocí příkazového řádku

  2. Jak najít balíček, který poskytuje konkrétní soubor v Linuxu

  3. Nástroj pro získání řádků v jednom souboru, které nejsou v jiném?