从文件中删除多余的文本

时间:2014-10-19 17:45:24

标签: bash cron

我只是想知道是否有办法在日志文件创建时删除某些多余的文本?我把它作为每天执行的cronjob。

就像我想要删除某个句子一样,该句子被添加到另一个进程创建的日志文件中。我在这里的例子是当它打开一个新的浏览器去网站时使用XDG-OPEN命令,或者当它打开一个文件时,它会创建额外的信息,当我打开它时,它是非常必要的它说的网站;

Created new window in existing browser session.

我有我的脚本写出一个日志文件,说明它用日期打开了什么,我想做的就是截断那些额外的信息,所以它的结果只写;

Opened [site] on    +++ [ date ] +++

而不是写作;

Opened [site] on    +++ [ date ] +++
Created new window in existing browser session.

我的剧本或多或少是这样的;

#!/bin/sh

LOG=/var/log/site_opened.log

echo -e "Opened <site_name> on    +++ [ $(date +'%a, %e %b %T %p') ] +++" >> $LOG
su - <user> xdg-open <site_url_here> >> $LOG

我确实阅读了XDG-OPEN的联合帮助页,但似乎并没有一种方法可以抑制该消息。我不太确定在将消息输出写入日志文件之后如何截断该消息输出。

另外一个奇怪的事情我注意到日志输出是在日志文件的开头,它输出像这样;

-e Opened [site] on    +++ [ date ] +++

不确定为什么要在-e添加echo选项。

1 个答案:

答案 0 :(得分:0)

您正在/bin/sh下运行脚本。 -e的{​​{1}}选项仅受某些shell支持。显然,您的echo不是其中之一。由于您似乎没有使用任何需要/bin/sh的功能,因此请将其删除。

-e

禁止来自xdg-open的不需要的消息:

echo "Opened <site_name> on    +++ [ $(date +'%a, %e %b %T %p') ] +++" >> $LOG

关于su - <user> xdg-open <site_url_here> | grep -v "Created new window in existing" >> $LOG

grep接受输入,并逐行比较模式。作为一个例子,让我们假设我们有一个文件:

grep

使用$ cat file quick brown fox ,我们可以选择该文件中包含“brown”一词的所有行:

grep

或者,使用$ grep 'brown' file brown ,我们可以选择该文件中的所有行,但具有“褐色”一词的那些:

grep -v

除了在命令行上接受文件名之外,$ grep -v 'brown' file quick fox 可以接受来自stdin的输入:

grep

如果是$ cat file | grep -v quick brown fox ,我们想删除xdg-open条消息,因此我们在该消息上使用了Created