如果不是重复行,Bash 添加到文件末尾 (>>)

标签 bash logging

通常我对在我的服务器上运行的进程使用类似这样的东西

./runEvilProcess.sh >> ./evilProcess.log

但是我目前正在使用 Doxygen,它会产生大量重复输出

示例输出:

QGDict::hashAsciiKey: Invalid null key
QGDict::hashAsciiKey: Invalid null key
QGDict::hashAsciiKey: Invalid null key

所以你最终得到了一个非常困惑的日志

有没有一种方法可以只将行添加到日志文件如果该行不是最后添加的。

一个糟糕的例子(但不确定如何在 bash 中做)

$previousLine = ""
$outputLine = getNextLine()
if($previousLine != $outputLine) {
  $outputLine >> logfile.log
  $previousLine = $outputLine
}

最佳答案

如果进程连续返回重复行,通过 uniq 管道输出您的进程:

 $ ./t.sh 
one
one
two
two
two
one
one
 $ ./t.sh | uniq
one
two
one

如果日志被发送到标准错误流,你也需要重定向它:

 $ ./yourprog 2>&1 | uniq >> logfile

(如果重复项来自程序的多次运行,这将无济于事 - 但您可以在查看日志文件时通过 uniq 传输日志文件。)

关于如果不是重复行,Bash 添加到文件末尾 (>>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202290/

相关文章:

java - log4j 设置日志文件名@运行时不起作用

linux - shell 脚本 : Hexadecimal Loop

linux - 为什么我对大写字母的检查总是结果为真,即使它不应该?

git - 从远程 Git 存储库获取变更集

linux - logrotate:删除超过 n 天的 tomcat/jboss 日志

java - Log4j2 创建不需要的日志文件

bash - 将字符串列表传递给 for 循环

linux - 如何在 Linux/Bash 中提取二进制文件的文本部分?

linux - 使用 nmcli 以编程方式激活和停用网络接口(interface)

docker - docker 日志级别会影响日志记录驱动程序还是仅影响 docker 守护程序的日志?