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.

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.


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

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.


3

Viele nette Schnickschnack hier!

KISS-Methode:

date >>filename; cat >>filename


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



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
      
    Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
    Licensed under cc by-sa 3.0 with attribution required.