Який найшвидший спосіб додати текст у файл із командного рядка?


30

Іноді в мене виникає думка, що я хочу записати у файл, поки перебуваю в терміналі. Я хотів би, щоб ці нотатки були в одному файлі, щойно перераховані одна за одною. Я також хотів би позначити дату / час на кожному.

Чи можливо це зробити без необхідності кожного разу відкривати файл? Чи можу я просто ввести його в термінал і додавати його до файлу кожен раз командою чи сценарієм?

Я використовую GNU BASH.

Відповіді:


25

Напишіть собі сценарій оболонки під назвою "n". Помістіть це:

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

Я рекомендую це замість того, cat >> notefileщо:

  1. Одного разу ви будете так поспішати, що ви будете мацати пальцем >> і набирати> замість цього і видувати ваш файл.
  2. Emacs запускається через п'ять сотих частини секунди на моєму Mac Mini. Щоб запустити десятирічну систему на базі селерону, в якій я сиджу, потрібно десяту частину секунди. Якщо ви не можете чекати так довго, щоб почати вводити текст, тоді ви вже є машиною і не потрібно робити нотатки. :)

Якщо ви наполягаєте на тому, щоб не уникати текстового редактора, використовуйте функцію оболонки:

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

які повинні працювати у всіх оболонках, що претендують на сумісність оболонки Борна.


1
Як nфункція записує у файл? Ви не маєте на увазі щось подібне, echo "$*"а не УУПЦ ? Як він включає тег дати / часу?
Jasonwryan

1
Не зовсім марно. Він читається з stdin, де користувач буде набирати свою замітку. Я все ж забув марку дати.
Кайл Джонс

Я не обов'язково погоджуюся з приводу UUOC, але ти маєш вказати на дату ...
jasonwryan

5
+1 приємне захисне кодування та обгрунтування проти неминучого друку.
msw

2
Кайл, ти, очевидно, не маєш 90 Мб .emacs.d. Так, мені потрібно це почистити.
kodlibetor

19

Крім того, щоб записати кілька рядків у файл із командного рядка, виконайте:

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

1
Або cat > sometextfile.txt << EOFперезаписати наявний файл.
mbomb007

10

Просто використовуйте echo:

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

Ви можете використовувати >>, щоб додати файл, або скористатися>, щоб перезаписати його.



2

Якщо на вашому комп'ютері встановлений рубін, ви можете скористатися https://github.com/minhajuddin/taskr . Таким чином ви отримуєте прекрасний перегляд своїх заміток з тегами та минулими годинами.

Скріншот Taskr


Ну, скріншоти виглядають часто дуже добре, але якщо ви можете, це набагато краще, якщо ви використовуєте copy-paste.
Peterh каже відновити Моніку

1

Залежно від ваших потреб, syslogd може бути ще одним інструментом для ознайомлення. Команда

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

запише повідомлення в об'єкт user.notice. У багатьох системах Linux цього буде достатньо, щоб файл /var/log/user.log відкрився та додався до нього, з іншими вам може знадобитися визначити обробку для цього об'єкта та рівень журналу (або залежно від того, що ви обрали - локальний0 до локальних закладів, як правило, вільно призначати подібні речі.

Це отримало перевагу в тому, що я можу (він може конфігуруватися) надсилати нотатки з клієнтських машин на центральний сервер реєстрації, що я люблю використовувати для відстеження адміністративних дій, оскільки він автоматично зберігає мітку часу, інформацію про користувачів та хостів, зберігаючи дії в порядку .

отриманий результат у локальному файлі:

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

Приклад лінії конфігурації syslog на Solaris :

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

Примітка: ifdefпредобработан з m4, на машині з хоста / hostalias «LOGHOST», повідомлення будуть записуватися в файл / вар / журнал / щоденник, на всіх інших, вони будуть відправлені на віддалений системного журналу служби в LOGHOST. Щоб перевірити такий тип конфігурації, конфігураційний файл можна надіслати через m4 для розширення (залиште подальше, -D LOGHOSTщоб побачити, як він виглядатиме в системі, яка не називається loghost :

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



0

Поєднуючи кілька різних відповідей, щоб досягти того, що я шукав, а це було кілька варіантів.

  1. Швидкий
    user @ hostname: ~ / Documents $ echo text >> ім'я файлу
    user @ hostname: ~ / Documents $ cat filename
    текст
    
  2. Кілька ліній
    user @ hostname: ~ / Documents $ cat >> filename2 << EOF
    > текстовий рядок 1
    > рядок 2 тексту
    > текстовий рядок 3
    > EOF
    user @ hostname: ~ / Documents $ cat filename2  
    текстовий рядок 1
    текстовий рядок 2
    текстовий рядок 3
    
    1. Змініть файл за заданим номером рядка

      user @ hostname: ~ / Documents $ sed -i '2iвстановлення нового рядка' filename2
      user @ hostname: ~ / Documents $ cat filename2
      текстовий рядок 1
      вставлення нового рядка
      текстовий рядок 2
      текстовий рядок 3
      
    Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
    Licensed under cc by-sa 3.0 with attribution required.