web-dev-qa-db-fra.com

Quelle est la façon la plus rapide d'ajouter du texte à un fichier à partir de la ligne de commande?

Parfois, j'ai une pensée que je veux écrire dans un fichier pendant que je suis au terminal. Je voudrais que ces notes soient toutes dans le même fichier, juste énumérées l'une après l'autre. Je voudrais également une étiquette date/heure sur chacun d'eux.

Est-il possible de le faire sans avoir à ouvrir le fichier à chaque fois? Puis-je simplement l'entrer dans le terminal et le faire ajouter au fichier à chaque fois avec une commande ou un script?

J'utilise GNU BASH.

32
Brian Dant

Écrivez-vous un script Shell appelé "n". Mettez ça dedans:

#!/bin/sh
notefile=/home/me/notefile
date >> $notefile
emacs $notefile -f end-of-buffer

Je recommande ceci au lieu de cat >> notefile parce que:

  1. Un jour, vous serez tellement pressé que vous échapperez le >> et tapez> à la place et que vous supprimerez votre fichier.
  2. Emacs démarre en cinq centièmes de seconde sur mon Mac Mini. Il faut un dixième de seconde pour démarrer sur un système basé sur Celeron vieux de dix ans que j'ai assis autour. Si vous ne pouvez pas attendre aussi longtemps pour commencer à taper, alors vous êtes déjà une machine et vous n'avez pas besoin de prendre des notes. :)

Si vous insistez pour éviter un éditeur de texte, utilisez une fonction Shell:

n () { date >> /home/me/notefile; cat >> /home/me/notefile; }

qui devrait fonctionner dans tous les shells revendiquant la compatibilité avec le Bourne Shell.

27
Kyle Jones

De plus, pour écrire plusieurs lignes dans un fichier à partir de la ligne de commande, procédez comme suit:

cat >> sometextfile.txt << EOF
text
more text
and another line
EOF
22
regretoverflow

Utilisez simplement echo:

echo $(date) Hi. >> notes.txt

Vous pouvez utiliser >> pour ajouter à un fichier, ou utiliser> pour l'écraser.

12
Rob Wouters

Beaucoup de cloches et de sifflets soignés ici!

Méthode KISS:

date >>filename; cat >>filename
3
Jan Steinman

Si vous avez Ruby installé sur votre ordinateur, vous pouvez utiliser https://github.com/minhajuddin/taskr . De cette façon, vous obtenez une belle vue de vos notes avec balises et les heures écoulées.

Taskr screenshot

2
Khaja Minhajuddin

Taskwarrior peut faire ce que vous vouliez un peu mieux qu'un simple script Shell. Le Tutoriel de 30 secondes devrait vous dire si j'ai raison ou tort.

echo "`date` text here" >> filename

ou

echo "text here `date`"|tee -a filename

plus sur tee

1
Balaswamy vaddeman

Selon vos besoins, syslogd peut être un autre outil à parcourir. La commande

theuser@tetrad:~$ logger This message is sent to syslog

enregistrera le message avec la fonction user.notice. Avec de nombreux systèmes Linux, cela suffira pour ouvrir et ajouter un fichier /var/log/user.log, avec d'autres, vous devrez peut-être définir une gestion pour cette installation et ce niveau de journal (ou, selon l'installation que vous choisissez - le local0 aux installations locales7 sont généralement libres d'affecter des choses comme celle-ci.

Il a l'avantage de pouvoir (alias configurable) envoyer des notes des machines client à un serveur de journalisation central, quelque chose que j'aime utiliser pour garder une trace de l'action administrative car il préserve automatiquement l'horodatage, les informations utilisateur et hôte, tout en gardant les actions dans l'ordre .

sortie résultante dans le fichier local:

theuser@tetrad:~$ tail /var/log/user.log
Jan 31 07:18:37 tetrad theuser: This message is sent to syslog

Exemple de ligne de configuration syslog sur Solaris:

local5.notice             ifdef(`LOGHOST', /var/log/diary, @loghost)

Remarque: ifdef est prétraité avec m4, sur la machine avec le nom d'hôte/hostalias "loghost", les messages seront enregistrés dans le fichier/var/log/diary, sur tous les autres, ils seront envoyés au service syslog distant sur loghost. Pour tester ce type de configuration, le fichier de configuration peut être envoyé via m4 pour expansion (laissez le -D LOGHOST pour voir à quoi cela ressemblerait sur un système non appelé loghost :

theuser@solstice$ /usr/ccs/bin/m4 -D LOGHOST /etc/syslog.conf
1
Tatjana Heuser

Combiner quelques réponses différentes pour réaliser ce que je cherchais, qui était plusieurs options.

  1. Rapide
     user @ hostname: ~/Documents $ echo text >> filename 
     user @ hostname: ~/Documents $ cat filename 
     text 
    
  2. Plusieurs lignes
    user @ hostname: ~/Documents $ cat >> filename2 << EOF 
    > ligne de texte 1 
    > ligne de texte 2 
    > ligne de texte 3 
    > EOF 
     user @ hostname: ~/Documents $ cat filename2 
     ligne de texte 1 
     ligne de texte 2 
     ligne de texte 3 
    
  1. Modifier un fichier à un numéro de ligne donné

     user @ hostname: ~/Documents $ sed -i '2iinserting new line' filename2 
     user @ hostname: ~/Documents $ cat filename2 
     text line 1 
     insertion d'une nouvelle ligne 
     ligne de texte 2 
     ligne de texte 3 
    
0
conman253