我只是想知道是否有办法在日志文件创建时删除某些多余的文本?我把它作为每天执行的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
选项。
答案 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
。