Jaki jest najszybszy sposób dodania tekstu do pliku z wiersza poleceń?


29

Czasami mam wrażenie, że chcę zapisać w pliku, gdy jestem w terminalu. Chciałbym, aby te notatki były w tym samym pliku, tylko wymienione jeden po drugim. Chciałbym również umieścić znacznik daty / godziny na każdym z nich.

Czy można to zrobić bez konieczności otwierania pliku za każdym razem? Czy mogę po prostu wprowadzić go do terminalu i za każdym razem dodawać do pliku za pomocą polecenia lub skryptu?

Używam GNU BASH.

Odpowiedzi:


25

Napisz sobie skrypt powłoki o nazwie „n”. Umieść to w tym:

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

Polecam to, cat >> notefileponieważ:

  1. Pewnego dnia będziesz się tak spieszył, że przekręcisz klawisz >> i napiszesz>, a następnie zdmuchniesz plik.
  2. Emacs zaczyna się za pięć setnych sekundy na moim Macu Mini. Rozpoczęcie od dziesięcioletniego systemu opartego na Celeronie, którego siedzę, zajmuje jedną dziesiątą sekundy. Jeśli nie możesz długo czekać na pisanie, jesteś już maszyną i nie musisz robić notatek. :)

Jeśli nalegasz na unikanie edytora tekstu, użyj funkcji powłoki:

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

który powinien działać we wszystkich powłokach, twierdząc, że jest zgodny z Bourne'em.


1
Jak nfunkcja zapisuje do pliku? Nie masz na myśli coś jak echo "$*"zamiast UUOC ? W jaki sposób zawiera znacznik daty / godziny?
jasonwryan

1
Nie całkiem bezużyteczne. Czyta ze standardowego wejścia, gdzie użytkownik będzie wpisywać notatkę. Jednak zapomniałem znacznika danych.
Kyle Jones

Niekoniecznie zgadzam się co do UUOC, ale musisz wskazać datę ...
jasonwryan

5
+1 ładne kodowanie obronne i uzasadnienie przeciwko nieuniknionej literówce.
msw

2
Kyle, oczywiście nie masz 90 MB .emacs.d. Tak, muszę to posprzątać.
quodlibetor

18

Ponadto, aby zapisać wiele wierszy do pliku z wiersza polecenia, wykonaj:

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

Lub cat > sometextfile.txt << EOFzastąpić istniejący plik.
mbomb007

10

Po prostu użyj echo:

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

Możesz użyć >>, aby dołączyć do pliku lub>, aby go zastąpić.


3

Wiele fajnych dzwonków i gwizdków tutaj!

Metoda KISS:

date >>filename; cat >>filename


1

W zależności od potrzeb syslogd może być kolejnym narzędziem do przejrzenia. Komenda

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

zarejestruje wiadomość w obiekcie user.notice. W przypadku wielu systemów Linux wystarczy, aby plik /var/log/user.log został otwarty i dołączony do niego, w przypadku innych może być konieczne zdefiniowanie obsługi tego obiektu i poziomu dziennika (lub dowolnego innego obiektu - local0 do local7 placówki są zwykle bezpłatne, aby przypisać takie rzeczy.

Ma tę zaletę, że jest w stanie (inaczej konfigurowalny) wysyłać notatki z komputerów klienckich do centralnego serwera rejestrującego, co lubię używać do śledzenia działań administracyjnych, ponieważ automatycznie zachowuje znacznik czasu, informacje o użytkowniku i hoście, jednocześnie zachowując porządek. .

wynik w pliku lokalnym:

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

Przykład linii konfiguracji syslog w systemie Solaris :

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

Uwaga: ifdefjest wstępnie przetwarzany m4, na komputerze o nazwie hosta / hostalias „loghost”, wiadomości zostaną zarejestrowane w pliku / var / log / diary, we wszystkich innych przypadkach zostaną wysłane do zdalnej usługi syslog na loghost. Aby przetestować tego rodzaju konfigurację, plik konfiguracyjny można wysłać przez m4 w celu rozszerzenia (pozostaw, -D LOGHOSTaby zobaczyć, jak wyglądałby w systemie nie nazywanym loghost :

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



0

Łącząc kilka różnych odpowiedzi, aby osiągnąć to, czego szukałem, było wiele opcji.

  1. Szybki
    użytkownik @ nazwa hosta: ~ / Dokumenty $ echo text >> nazwa pliku
    użytkownik @ nazwa hosta: ~ / Dokumentuje $ cat filename
    tekst
    
  2. Wiele linii
    użytkownik @ nazwa hosta: ~ / Dokumenty $ cat >> nazwa_pliku2 << EOF
    > wiersz tekstu 1
    > wiersz tekstu 2
    > wiersz tekstu 3
    > EOF
    użytkownik @ nazwa hosta: ~ / Dokumenty $ cat filename2  
    wiersz tekstu 1
    2. wiersz tekstu
    wiersz tekstu 3
    
    1. Zmodyfikuj plik pod danym numerem linii

      użytkownik @ nazwa hosta: ~ / Dokumenty $ sed -i '2iinserting new line' nazwa_pliku2
      użytkownik @ nazwa hosta: ~ / Dokumenty $ cat filename2
      wiersz tekstu 1
      wstawianie nowej linii
      2. wiersz tekstu
      wiersz tekstu 3
      
    Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
    Licensed under cc by-sa 3.0 with attribution required.