【发布时间】:2019-08-31 09:05:24
【问题描述】:
我有一个日志文件,它与我试图清理的 stderr 结合在一起。我可以隔离并找到stderr“污染”,但我正在努力处理一个小细节:删除换行符
这是我尝试恢复的单独标准输出:
some message 1234556
more info foo bar
这是我试图摆脱 stderr 消息的组合 stdout/stderr 文件:
some message 1234/some/path ERROR
more info only 1 line though
556
more info foo bar
所以这是我要删除的文本:
/some/path ERROR
more info only 1 line though
包括换行符,以便恢复单独的标准输出。
我打电话:
# get rid of the line AFTER the stderr start
sed -i".bak" -e '/ERROR/{n;d}' *.log
# get rid of the start of stderr
sed -i".bak" -r 's/\/some\/path.*ERROR//' *.log
不幸的是,现在的输出是:
some message 1234
556
more info foo bar
注意,stderr 消息的插入点可以是任意的(在一行的中间或开头,任何地方)。我唯一能假设的是 stderr 是一个两行代码,它以 /some/path 开头并包含一个错误标识符(ERROR 或其他内容)。此外,可能会有多个后续的 stderr 消息,例如:
some message 1234/some/path ERROR
more info only 1 line though
/some/path ANOTHER_ERR
more info only 1 line though
556
more info foo bar
我认为这不会造成太大问题(只有 2 种,所以我可以运行多个不同的匹配项(ERROR 和 ANOTHER_ERR))。我也不关心使用哪个工具sed 或awk...
【问题讨论】:
-
你能澄清几件事吗:(1)你怎么会有这样的交错输出?您是否将两个命令的输出发送到同一个文件? (2)
more info only总是以空格开头吗?
标签: bash awk sed text-processing