从命令行向文件添加文本的最快方法是什么?


29

有时我想到在终端时要写入文件。我希望这些注释都在同一个文件中,一个接一个地列出。我还希望每个日期都带有日期/时间标签。

是否可以这样做而不必每次都打开文件?我可以仅将其输入到终端中,然后每次使用命令或脚本将其附加到文件中吗?

我正在使用GNU BASH。

Answers:


25

编写一个名为“ n”的shell脚本。把它放进去:

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

我建议这样做,而不是cat >> notefile因为:

  1. 有一天,您会非常匆忙,以至于用手指指>>,然后键入>,然后删除文件。
  2. Emacs在Mac Mini上以五十分之一秒的速度启动。在我已经使用了十年的基于赛扬的系统上启动,需要十分之一秒的时间。如果您迫不及待地想开始输入文字,那么您已经是一台机器了,不需要做笔记。:)

如果您坚持避免使用文本编辑器,请使用shell函数:

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

在声称具有Bourne Shell兼容性的所有Shell中都可以使用。


1
n函数如何写入文件?难道你的意思是这样一个echo "$*",而不是UUOC?如何整合日期/时间标签?
jasonwryan 2012年

1
不是没有用。它从标准输入中读取,在标准输入中,用户将在其输入注释。我确实忘记了日期戳。
凯尔·琼斯

我不一定同意UUOC,但您需要指出日期……
jasonwryan 2012年

5
+1好的防御性编码针对不可避免的错字的原理。
msw 2012年

2
凯尔(Kyle),您显然没有90MB的空间.emacs.d。kes,我需要清理一下。
quodlibetor 2012年

18

另外,要从命令行将多行内容写入文件,请执行以下操作:

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

cat > sometextfile.txt << EOF覆盖现有文件。
mbomb007

10

只需使用echo

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

您可以使用>>附加到文件,或使用>覆盖文件。


3

这里有许多整洁的钟声和口哨声!

吻法:

date >>filename; cat >>filename


1

根据您的需求,syslogd可能是另一个值得研究的工具。命令

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

会将消息记录在设施user.notice中。在许多Linux系统上,只要打开并附加一个文件/var/log/user.log就足够了,对于其他Linux系统,您可能需要定义该功能和日志级别的处理(或选择的任何一种功能-local0通常,可以免费将local7设施分配给此类设施。

它具有能够(也可配置)从客户端计算机向中央日志记录服务器发送注释的好处,我喜欢用它来跟踪管理操作,因为它可以自动保存时间戳,用户和主机信息,同时使操作保持顺序。

结果输出在本地文件中:

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

Solaris上syslog配置行的示例:

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

注意:在主机名/主机别名为“ loghost”的计算机上使用进行了ifdef预处理m4,消息将被记录到文件/ var / log / diary中,在所有其他消息上,它们将被发送到loghost的远程syslog服务。要测试这种配置,可以通过m4发送配置文件以进行扩展(不使用-D LOGHOST即可查看配置文件在名为loghost的系统上的外观:

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



0

结合几个不同的答案来实现我所寻求的目标,这是多种选择。

  1. user @ hostname:〜/ Documents $回显文本>>文件名
    user @ hostname:〜/ Documents $ cat文件名
    文本
    
  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'2'插入新行'filename2
      user @ hostname:〜/ Documents $ cat filename2
      文字行1
      插入新行
      文字行2
      文字行3
      
    By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
    Licensed under cc by-sa 3.0 with attribution required.