185 votes

Commande pour ajouter une ligne à un fichier texte sans ouvrir un éditeur

Supposons que j'ai une ligne que je veux ajouter à un fichier sans ouvrir un éditeur.

Comment puis-je ajouter cette ligne

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

à ce fichier

config.fish

291voto

andybee Points 497

Vous pouvez ajouter un ligne de texte dans un fichier en utilisant l'option >> opérateur :

echo "hello world" >> my_file.txt

ou dans votre cas

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

Veuillez prendre note de la différents types de devis .

6voto

Sergiy Kolodyazhnyy Points 97292

Il existe de nombreuses méthodes pour ajouter des fichiers sans ouvrir d'éditeur de texte, notamment via les multiples utilitaires de traitement de texte disponibles dans Ubuntu. En général, tout ce qui nous permet d'effectuer open() syscall avec O_APPEND ajouté, peut être utilisé pour ajouter à un fichier.

  • Version GNU de dd L'utilitaire peut ajouter des données au fichier avec conv=notrunc oflag=append

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

    Nous pourrions utiliser quelque chose comme ceci sur le côté droit du pipeline :

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

    Notez l'utilisation de bs=1 qui consiste à éviter les lectures courtes dans le pipeline

  • El tee peut être utilisée lorsque vous avez besoin d'ajouter un fichier et de l'envoyer vers la sortie standard ou vers la commande suivante dans le pipeline.

    tee -a config.fish <<< "alias list='ls -cl --group-directories-first'"
  • awk a l'opérateur append >> qui est également portable et définis par les spécifications POSIX

    awk 'BEGIN{ printf "alias list=\x27ls -cl --group-directories-first\x27\n" >> "config.fish"  }'
  • Nous pouvons combiner sed drapeau de $ pour faire correspondre la dernière ligne avec a pour l'ajout et -i pour l'édition sur place.

    sed -i '$a alias list='"'"'ls -cl --group-directories-first'"'" config.fish
  • Nous pourrions même mettre en œuvre quelque chose comme dd dans 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())

Voir aussi :

6voto

wjandrea Points 13147

Ajouter à La réponse de Stefano vous pouvez également utiliser cat :

  • Utilisation d'un hérédoc :

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

    <<'EOF' signifie "prends ce qui suit comme entrée, jusqu'à ce que tu atteignes une ligne qui est juste EOF ". Les guillemets signifient qu'il faut prendre l'entrée littéralement.

  • Ou en entrant la ligne sur stdin :

    $ cat >> config.fish

    Ensuite, collez ou tapez dans la ligne, appuyez sur Enter pour passer à une nouvelle ligne, puis appuyez sur Ctrl+D pour marquer la fin.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X