Какой самый быстрый способ добавить текст в файл из командной строки?

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. Для запуска десятилетней системы на базе Celeron, которую я сижу, требуется десятая доля секунды. Если вы не можете ждать так долго, чтобы начать печатать, то вы уже машина и вам не нужно делать заметки. :)

Если вы настаиваете на том, чтобы избегать текстового редактора, используйте функцию оболочки:

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

который должен работать во всех оболочках, требующих совместимости оболочки Bourne.

Кайл Джонс
источник
1
Как nфункция записи в файл? Разве вы не имеете в виду что-то вроде echo "$*"скорее UUOC ? Как он включает в себя тег даты / времени?
Джейсонвриан
1
Не совсем бесполезно. Он читает из стандартного ввода, где пользователь будет печатать свои заметки. Я действительно забыл дату.
Кайл Джонс
Я не обязательно согласен с UUOC, но вы просите указать дату ...
jasonwryan
5
+1 хорошее защитное кодирование и обоснование против неизбежной опечатки.
Msw
2
Кайл, у тебя явно нет 90 МБ .emacs.d. Да, мне нужно это почистить.
quodlibetor
19

Также, чтобы записать несколько строк в файл из командной строки, выполните:

cat >> sometextfile.txt << EOF
text
more text
and another line
EOF
regretoverflow
источник
1
Или cat > sometextfile.txt << EOFперезаписать существующий файл.
mbomb007
10

Просто используйте echo:

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

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

Роб Ваутерс
источник
3

Здесь много аккуратных наворотов!

ПОЦЕЛУЙ метод:

date >>filename; cat >>filename
Ян Стейнман
источник
2

Если на вашем компьютере установлен ruby, вы можете использовать https://github.com/minhajuddin/taskr . Таким образом, вы получите хороший обзор ваших заметок с тегами и прошедшими часами.

Скриншот Taskr

Хаджа Минхаджуддин
источник
Ну, скриншоты часто выглядят очень хорошо, но если вы можете, то гораздо лучше, если вы используете copy-paste.
Петер говорит восстановить Монику
1

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

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

запишет сообщение с объектом user.notice. Во многих системах Linux этого будет достаточно для открытия и добавления файла /var/log/user.log, а для других вам может потребоваться определить обработку для этого средства и уровня журнала (или любого другого средства, выбранного вами - local0). к местным7 объектам обычно можно бесплатно отнести такие вещи.

Преимущество заключается в том, что он может (или настраивается) отправлять заметки с клиентских компьютеров на центральный сервер журналов, что мне нравится использовать для отслеживания административных действий, поскольку он автоматически сохраняет метки времени, информацию о пользователях и хостах, сохраняя при этом действия в порядке. ,

результирующий вывод в локальном файле:

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

Пример строки конфигурации системного журнала в Solaris :

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

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

theuser@solstice$ /usr/ccs/bin/m4 -D LOGHOST /etc/syslog.conf
Татьяна Хойзер
источник
1

Taskwarrior может делать то, что вы хотели немного лучше, чем простой скрипт оболочки. 30-второй учебник должен сказать вам , если я правильно или неправильно.

Сардатрион - Восстановить Монику
источник
1
echo "`date` text here" >> filename

или

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

больше на тройник

Баласвами Ваддеман
источник
только
один удар назад
1
Для чего бы это ни стоило, я бы порекомендовал использовать $(..)заменители для замены команд. Дополнительная информация: unix.stackexchange.com/questions/11576/…
rahmu
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 '2iinserting new line' filename2
      user @ hostname: ~ / Documents $ cat filename2
      текстовая строка 1
      вставка новой строки
      текстовая строка 2
      текстовая строка 3
      
    conman253
    источник