Qual é a maneira mais rápida de adicionar texto a um arquivo a partir da linha de comando?

24

Ocasionalmente, penso que quero escrever em um arquivo enquanto estou no terminal. Eu gostaria que essas anotações estivessem no mesmo arquivo, apenas listadas uma após a outra. Eu também gostaria de uma tag de data / hora em cada um.

É possível fazer isso sem ter que abrir o arquivo toda vez? Posso apenas inseri-lo no terminal e anexá-lo ao arquivo toda vez com um comando ou script?

Estou usando o GNU BASH.

    
por Brian Dant 27.01.2012 / 02:52

9 respostas

22

Escreva um script de shell chamado "n". Coloque isso aqui:

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

Eu recomendo isso em vez de cat >> notefile porque:

  1. Um dia você vai estar com tanta pressa que você vai comer o > > e digite > em vez disso e sopre seu arquivo.
  2. O Emacs começa em cinco centésimos de segundo no meu Mac Mini. Demora um décimo de segundo para começar em um sistema baseado em Celeron de dez anos que eu tenho sentado ao redor. Se você não pode esperar tanto tempo para começar a digitar, então você já é uma máquina e não precisa fazer anotações. :)

Se você insistir em evitar um editor de texto, use uma função de shell:

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

que deve funcionar em todos os shells que exigem compatibilidade com o shell Bourne.

    
por 27.01.2012 / 04:09
14

Além disso, para escrever várias linhas em um arquivo a partir da linha de comando, faça:

cat >> sometextfile.txt << EOF
text
more text
and another line
EOF
    
por 27.07.2012 / 21:29
9

Use apenas echo :

echo $(date) Hi. >> notes.txt
    
por 27.01.2012 / 02:56
3

Muitos sinos e assobios limpos aqui!

Método KISS:

date >>filename; cat >>filename
    
por 02.02.2012 / 07:14
2

Se você tiver o ruby instalado no seu computador, você pode usar o link . Dessa forma, você terá uma boa visão de suas anotações com as tags e as horas transcorridas.

    
por 31.01.2012 / 04:23
1

Dependendo de suas necessidades, o syslogd pode ser outra ferramenta para examinar. O comando

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

registrará a mensagem com o user.notice da instalação. Com muitos sistemas Linux isso será o suficiente para ter um arquivo /var/log/user.log aberto e anexado, com outros você pode precisar definir um tratamento para esse recurso e nível de log (ou, qualquer que seja a facilidade que você escolher - o local0 para as instalações locais7 são geralmente livres para atribuir coisas como esta.

Ele tem a vantagem de ser capaz (configurável) de enviar notas de máquinas cliente para um servidor de log central, algo que eu gosto de usar para monitorar a ação administrativa, pois preserva as informações de timestamp, usuário e host de forma automática, mantendo ações em ordem.

resultado resultante no arquivo local:

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

Exemplo de linha de configuração do syslog no Solaris :

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

Nota: O ifdef é pré-processado com m4 , na máquina com o "host de log" hostname / hostalias, as mensagens serão registradas no arquivo / var / log / diário, em todas as outras, elas serão enviado para o serviço de syslog remoto no loghost. Para testar este tipo de configuração, o arquivo de configuração pode ser enviado através de m4 para expansão (deixe de lado o -D LOGHOST para ver como ficaria em um sistema não chamado loghost :

theuser@solstice$ /usr/ccs/bin/m4 -D LOGHOST /etc/syslog.conf
    
por 31.01.2012 / 07:24
1

Taskwarrior pode fazer o que você queria um pouco melhor do que um simples shell script. O tutorial de 30 segundos deve lhe dizer se estou certo ou errado.

    
por 02.02.2012 / 09:35
1
echo "'date' text here" >> filename

ou

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

mais sobre tee

    
por 27.01.2012 / 06:36
0

Combinando algumas respostas diferentes para alcançar o que eu procurava, o que era várias opções.

  1. Rápido
    user@hostname:~/Documents$ echo text >> filename
    user@hostname:~/Documents$ cat filename
    text
    
  2. Várias linhas
user@hostname:~/Documents$ cat >> filename2 << EOF
> text line 1
> text line 2
> text line 3
> EOF
user@hostname:~/Documents$ cat filename2  
text line 1
text line 2
text line 3
  1. Modifique um arquivo em um determinado número de linha

    user@hostname:~/Documents$ sed -i '2iinserting new line' filename2
    user@hostname:~/Documents$ cat filename2
    text line 1
    inserting new line
    text line 2
    text line 3
    
por 05.09.2017 / 01:34