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.

Brian Dant
źródło

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.

Kyle Jones
źródło
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
regretoverflow
źródło
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ć.

Rob Wouters
źródło
3

Wiele fajnych dzwonków i gwizdków tutaj!

Metoda KISS:

date >>filename; cat >>filename
Jan Steinman
źródło
2

Jeśli masz zainstalowany Ruby na swoim komputerze, możesz użyć https://github.com/minhajuddin/taskr . W ten sposób uzyskasz ładny widok notatek z tagami i upływającymi godzinami.

Zrzut ekranu zadania

Khaja Minhajuddin
źródło
Zrzuty ekranu wyglądają często bardzo dobrze, ale jeśli możesz, o wiele lepiej jest użyć kopiuj-wklej.
Peter mówi, że przywróć Monikę
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
Tatjana Heuser
źródło
1

Taskwarrior może zrobić to, co chciałeś, trochę lepiej niż prosty skrypt powłoki. 30 sekund Tutorial powinien powiedzieć, czy mam rację czy nie.

Sardathrion - Przywróć Monikę
źródło
1
echo "`date` text here" >> filename

lub

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

więcej na tee

Balaswamy Vaddeman
źródło
tylko jeden backtick
Balaswamy vaddeman
1
Jeśli chodzi o to, co warto, $(..)zaleciłbym użycie nadkolek do zastąpienia poleceń. Więcej informacji: unix.stackexchange.com/questions/11576/…
rahmu
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
      
    conman253
    źródło