gpt4 book ai didi

bash - sed 或 awk 删除包括换行符的模式

转载 作者:行者123 更新时间:2023-11-29 09:34:33 25 4
gpt4 key购买 nike

我有一个与 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 种,所以我可以运行多个不同的匹配项(ERRORANOTHER_ERR))。我也不关心使用哪个工具 sedawk...

最佳答案

您可以使用 perl 强大的段落模式选项。 -00 命令行选项打开段落模式,意味着 Perl 逐段读取文本,而不是逐行(一个段落是两个或多个换行符之间的文本。)

perl -00 -pe 's/\/.*(ERROR|ANOTHER_ERR)\n.*\n//g' file

要就地添加修改,添加 -i 标志,类似于 sed

perl -00 -pi -e 's/\/.*(ERROR|ANOTHER_ERR)\n.*\n//g' file

关于bash - sed 或 awk 删除包括换行符的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com