Was ist die schnellste Möglichkeit, einer Datei Text über die Befehlszeile hinzuzufügen?

29

Gelegentlich habe ich den Gedanken, dass ich in eine Datei schreiben möchte, während ich am Terminal bin. Ich möchte diese Notizen alle in der gleichen Datei, nur nacheinander aufgeführt. Ich möchte auch ein Datum / Uhrzeit-Tag auf jedem.

Ist es möglich, dies zu tun, ohne die Datei jedes Mal öffnen zu müssen? Kann ich es einfach in das Terminal eingeben und jedes Mal mit einem Befehl oder Skript an die Datei anhängen lassen?

Ich benutze GNU BASH.

Brian Dant
quelle

Antworten:

25

Schreiben Sie sich ein Shell-Skript mit dem Namen "n". Gib das ein:

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

Ich empfehle dies statt cat >> notefileweil:

  1. Eines Tages wirst du es so eilig haben, dass du stattdessen das >> fummelst und> eingibst und deine Datei wegbläst.
  2. Emacs startet auf meinem Mac Mini in fünf Hundertstelsekunden . Es dauert eine Zehntelsekunde, um mit einem zehn Jahre alten Celeron-basierten System zu beginnen, mit dem ich zusammengesessen habe. Wenn Sie nicht so lange mit dem Tippen warten können, sind Sie bereits ein Computer und müssen keine Notizen machen. :)

Wenn Sie darauf bestehen, einen Texteditor zu vermeiden, verwenden Sie eine Shell-Funktion:

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

Das sollte in allen Shells funktionieren, die Bourne-Shell-Kompatibilität beanspruchen.

Kyle Jones
quelle
1
Wie schreibt die nFunktion in die Datei? Meinst du nicht so etwas wie ein echo "$*"eher als UUOC ? Wie wird das Datum / Uhrzeit-Tag eingefügt?
Jasonwryan
1
Nicht ganz nutzlos. Es liest von stdin, wo der Benutzer seine Notiz eingeben wird. Den Datumsstempel habe ich allerdings vergessen.
Kyle Jones
Ich bin nicht unbedingt einverstanden mit der UUOC, aber Sie müssen auf das Datum
hinweisen
5
+1 nette defensive Codierung und Begründung gegen den unvermeidlichen Tippfehler.
msw
2
Kyle, du hast offensichtlich keine 90 MB .emacs.d. Huch, ich muss das aufräumen.
quodlibetor
18

Gehen Sie wie folgt vor, um mehrere Zeilen von der Befehlszeile aus in eine Datei zu schreiben:

cat >> sometextfile.txt << EOF
text
more text
and another line
EOF
bedauerlicher Überlauf
quelle
Oder cat > sometextfile.txt << EOFum die vorhandene Datei zu überschreiben.
mbomb007
10

Verwenden Sie einfach echo:

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

Sie können >> verwenden, um eine Datei anzuhängen, oder>, um sie zu überschreiben.

Rob Wouters
quelle
3

Viele nette Schnickschnack hier!

KISS-Methode:

date >>filename; cat >>filename
Jan Steinman
quelle
2

Wenn Sie Ruby auf Ihrem Computer installiert haben, können Sie https://github.com/minhajuddin/taskr verwenden . Auf diese Weise erhalten Sie einen schönen Überblick über Ihre Notizen mit Tags und die abgelaufenen Stunden.

Taskr-Screenshot

Khaja Minhajuddin
quelle
Nun, Screenshots sehen oft sehr gut aus, aber wenn Sie können, ist es viel besser, wenn Sie Copy-Paste verwenden.
Peter sagt, Monica
1

Je nach Ihren Anforderungen ist syslogd möglicherweise ein weiteres Tool, das Sie durchlesen sollten. Der Befehl

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

wird die Nachricht mit der Einrichtung user.notice protokollieren. Bei vielen Linux-Systemen reicht dies aus, um die Datei /var/log/user.log zu öffnen und an sie anzuhängen. Bei anderen Systemen müssen Sie möglicherweise eine Behandlung für diese Einrichtung und die Protokollebene (oder die von Ihnen gewählte Einrichtung - local0) definieren Es steht den Einrichtungen von local7 normalerweise frei, solche Aufgaben zu übernehmen.

Es hat den Vorteil, dass Notizen von Client-Computern an einen zentralen Protokollierungsserver gesendet werden können (auch als konfigurierbar bezeichnet), was ich gerne verwende, um administrative Aktionen im Auge zu behalten, da Zeitstempel-, Benutzer- und Host-Informationen automatisch beibehalten und Aktionen in der richtigen Reihenfolge ausgeführt werden .

resultierende Ausgabe in lokaler Datei:

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

Beispiel für eine Syslog-Konfigurationszeile unter Solaris :

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

Hinweis: Die ifdefvorverarbeitet mit m4auf der Maschine mit dem Hostnamen / HOST „loghost“, werden die Nachrichten in die Datei / var / log / Tagebuch protokolliert werden, auf alle anderen, werden sie bei loghost an den Remote - Syslog - Dienst gesendet werden. Um diese Art der Konfiguration zu testen, kann die Konfigurationsdatei zur Erweiterung über m4 gesendet werden (lassen Sie das weg, um -D LOGHOSTzu sehen, wie es auf einem System ohne den Namen loghost aussehen würde :

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

Taskwarrior kann etwas besser als ein einfaches Shell-Skript, was Sie wollten. Das 30-Sekunden-Tutorial sollte Ihnen sagen, ob ich richtig oder falsch liege.

Sardathrion - Setzen Sie Monica wieder ein
quelle
1
echo "`date` text here" >> filename

oder

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

mehr auf tee

Balaswamy vaddeman
quelle
nur einfache Rückfahrkarte
Balaswamy vaddeman
1
Für das, was es wert ist, würde ich empfehlen, $(..)die Backticks für die Befehlssubstitution zu verwenden. Weitere Informationen: unix.stackexchange.com/questions/11576/…
rahmu
0

Kombiniere ein paar verschiedene Antworten, um das zu erreichen, wonach ich gesucht habe. Das waren mehrere Optionen.

  1. Schnell
    user @ hostname: ~ / Documents $ echo text >> dateiname
    user @ hostname: ~ / Documents $ cat Dateiname
    Text
    
  2. Mehrere Zeilen
    user @ hostname: ~ / Documents $ cat >> Dateiname2 << EOF
    > Textzeile 1
    > Textzeile 2
    > Textzeile 3
    > EOF
    user @ hostname: ~ / Documents $ cat filename2  
    Textzeile 1
    Textzeile 2
    Textzeile 3
    
    1. Ändern Sie eine Datei an einer bestimmten Zeilennummer

      user @ hostname: ~ / Documents $ sed -i '2iinsert new line' filename2
      user @ hostname: ~ / Documents $ cat filename2
      Textzeile 1
      neue Zeile einfügen
      Textzeile 2
      Textzeile 3
      
    conman253
    quelle