Apa cara tercepat untuk menambahkan teks ke file dari baris perintah?

30

Kadang-kadang saya berpikir bahwa saya ingin menulis ke dalam file ketika saya di terminal. Saya ingin semua catatan ini dalam file yang sama, hanya terdaftar satu demi satu. Saya juga ingin tag tanggal / waktu pada masing-masing tag

Apakah mungkin melakukan ini tanpa harus membuka file setiap kali? Bisakah saya memasukkannya ke terminal dan menambahkannya ke file setiap kali dengan perintah atau skrip?

Saya menggunakan GNU BASH.

Brian Dant
sumber

Jawaban:

25

Tulis sendiri skrip shell yang disebut "n". Taruh ini di dalamnya:

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

Saya merekomendasikan ini daripada cat >> notefilekarena:

  1. Suatu hari Anda akan terburu-buru sehingga Anda akan mencari-cari >> dan ketik> sebagai gantinya dan meniup file Anda.
  2. Emacs dimulai dalam lima per seratus detik di Mac Mini saya. Butuh sepersepuluh detik untuk memulai pada sistem berbasis Celeron berusia sepuluh tahun yang telah saya duduki. Jika Anda tidak bisa menunggu selama itu untuk mengetik, maka Anda sudah menjadi mesin dan tidak perlu membuat catatan. :)

Jika Anda bersikeras menghindari editor teks, gunakan fungsi shell:

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

yang harus bekerja di semua shell yang mengklaim kompatibilitas shell Bourne.

Kyle Jones
sumber
1
Bagaimana nfungsi menulis ke file? Tidakkah Anda berarti sesuatu seperti echo "$*"daripada UUOC ? Bagaimana cara memasukkan tag tanggal / waktu?
jasonwryan
1
Tidak terlalu berguna. Bunyinya dari stdin, di situlah pengguna akan mengetik catatan mereka. Saya memang lupa datestamp.
Kyle Jones
Saya tidak selalu setuju tentang UUOC, tetapi Anda harus mengembalikannya pada tanggal ...
jasonwryan
5
+1 coding defensif bagus dan alasan terhadap kesalahan ketik yang tak terhindarkan
msw
2
Kyle, Anda jelas tidak memiliki 90MB .emacs.d. Astaga, aku harus membersihkannya.
quodlibetor
19

Juga, untuk menulis banyak baris ke file dari baris perintah, lakukan:

cat >> sometextfile.txt << EOF
text
more text
and another line
EOF
aliran menyesal
sumber
1
Atau cat > sometextfile.txt << EOFuntuk menimpa file yang ada.
mbomb007
10

Cukup gunakan echo:

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

Anda dapat menggunakan >> untuk menambahkan file, atau menggunakan> untuk menimpanya.

Rob Wouters
sumber
3

Banyak lonceng dan peluit yang rapi di sini!

Metode CIUMAN:

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

Jika Anda menginstal ruby ​​di komputer, Anda dapat menggunakan https://github.com/minhajuddin/taskr . Dengan cara ini Anda mendapatkan tampilan yang bagus dari catatan Anda dengan tag dan waktu berlalu.

Tangkapan layar taskr

Khaja Minhajuddin
sumber
Nah, tangkapan layar sering terlihat sangat baik, tetapi jika Anda bisa, jauh lebih baik jika Anda menggunakan salin-tempel.
peterh mengatakan mengembalikan Monica
1

Tergantung pada kebutuhan Anda, syslogd mungkin merupakan alat lain untuk dibaca. Perintah

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

akan mencatat pesan dengan fasilitas user.notice. Dengan banyak sistem Linux, ini akan cukup untuk membuat file /var/log/user.log dibuka dan ditambahkan, dengan yang lain Anda mungkin perlu mendefinisikan penanganan untuk fasilitas tersebut dan tingkat log (atau, fasilitas mana pun yang Anda pilih - local0 ke local7 fasilitas biasanya bebas untuk menetapkan hal-hal seperti ini.

Itu mendapat manfaat karena mampu (alias dapat dikonfigurasi) untuk mengirim catatan dari mesin klien ke server logging pusat, sesuatu yang saya suka gunakan untuk melacak tindakan administratif karena menjaga stempel waktu, informasi pengguna dan host secara otomatis, sambil menjaga tindakan dalam urutan .

hasil keluaran dalam file lokal:

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

Contoh untuk baris konfigurasi syslog di Solaris :

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

Catatan: Ini ifdefdiproses dengan m4, pada mesin dengan hostname / hostalias "loghost", pesan akan dicatat ke file / var / log / diary, pada semua yang lain, mereka akan dikirim ke layanan syslog jarak jauh di loghost. Untuk menguji konfigurasi seperti ini, file config dapat dikirim melalui m4 untuk ekspansi (biarkan -D LOGHOSTuntuk melihat bagaimana tampilannya pada sistem yang tidak disebut loghost :

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

Taskwarrior dapat melakukan apa yang Anda inginkan sedikit lebih baik daripada skrip shell sederhana. The 30 detik Tutorial harus memberitahu Anda jika saya benar atau salah.

Sardathrion - Pasang kembali Monica
sumber
1
echo "`date` text here" >> filename

atau

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

lebih lanjut tentang tee

Balaswamy vaddeman
sumber
single backtick saja
Balaswamy vaddeman
1
Untuk apa nilainya, saya akan merekomendasikan menggunakan $(..)overticks untuk substitusi perintah. Info lebih lanjut: unix.stackexchange.com/questions/11576/…
rahmu
0

Menggabungkan beberapa jawaban berbeda untuk mencapai apa yang saya cari, yang merupakan beberapa pilihan.

  1. Cepat
    user @ hostname: ~ / Dokumen $ echo text >> nama file
    user @ hostname: ~ / Dokumen $ nama file kucing
    teks
    
  2. Beberapa baris
    user @ hostname: ~ / Documents $ cat >> filename2 << EOF
    > baris teks 1
    > baris teks 2
    > baris teks 3
    > EOF
    user @ hostname: ~ / Documents $ cat filename2  
    baris teks 1
    baris teks 2
    baris teks 3
    
    1. Ubah file pada nomor baris yang diberikan

      user @ hostname: ~ / Documents $ sed -i '2iinserting new line' filename2
      user @ hostname: ~ / Documents $ cat filename2
      baris teks 1
      memasukkan baris baru
      baris teks 2
      baris teks 3
      
    conman253
    sumber