it-swarm.dev

Příkaz k připojení řádku k textovému souboru bez otevření editoru

Za předpokladu, že mám řádek, který chci přidat do souboru bez otevření editoru.

Jak mohu připojit tento řádek

alias list='ls -cl --group-directories-first'

do tohoto souboru

config.fish
163
NES

Do souboru můžete připojit řádek textu pomocí >> operátor:

echo "hello world" >> my_file.txt

nebo ve vašem případě

echo "alias list='ls -cl --group-directories-first'" >> config.fish

Vezměte prosím na vědomí různé typy nabídek .

264
Stefano Palazzo

Existuje spousta metod připojení k souboru bez otevírání textových editorů, zejména prostřednictvím více dostupných nástrojů pro zpracování textu v Ubuntu. Obecně lze k připojení k souboru použít vše, co nám umožňuje provádět open() syscall s přidaným příznakem O_APPEND.

  • GNU verze nástroje dd může připojit data k souboru pomocí conv=notrunc oflag=append

    printf "\nalias list='ls -cl --group-directories-first'\n" | dd conv=notrunc oflag=append bs=1 of=config.fish
    

    Přenosně bychom mohli použít něco takového na pravé straně potrubí:

    dd conv=notrunc seek=$(wc -c < testFile.txt) bs=1 of=testFile.txt
    

    Všimněte si použití bs=1, Což je zabránění krátkým přečtením z potrubí

  • Příkaz tee lze použít, když potřebujete připojit k souboru a odeslat jej ke stdout nebo k dalšímu příkazu v potrubí

    tee -a config.fish <<< "alias list='ls -cl --group-directories-first'"
    
  • awk má připojený operátor >>, který je také přenosný a definovaný specifikací POSIX

    awk 'BEGIN{ printf "alias list=\x27ls -cl --group-directories-first\x27\n" >> "config.fish"  }'
    
  • Můžeme kombinovat příznak sed$ Tak, aby se poslední řádek shodoval s a pro připojení a -i Pro úpravy na místě.

    sed -i '$a alias list='"'"'ls -cl --group-directories-first'"'" config.fish
    
  • Mohli bychom dokonce implementovat něco jako dd v Python 3:

    #!/usr/bin/env python3
    # read bytes from stdin, append to specified file
    import sys

    with open(sys.argv[1],'ab') as f:
         f.write(sys.stdin.buffer.read())

Viz také:

4

Když přidáte Stefanoova odpověď , můžete také použít cat:

  • Použití heredoc:

    $ cat >> config.fish <<'EOF'
    > alias list='ls -cl --group-directories-first'
    > EOF
    

    <<'EOF' znamená "vezměte následující jako vstup, dokud nedosáhnete řádku, který je právě EOF". Citace znamenají brát vstup doslova.

  • Nebo zadáním řádku na stdin:

    $ cat >> config.fish
    

    Poté vložte nebo zadejte řádek a stiskněte Enter přejděte na nový řádek a stisknutím kláves Ctrl + D označte konec.

3
wjandrea