【发布时间】:2019-02-02 14:54:05
【问题描述】:
我有一个文件,其中包含不规则的垃圾收集信息,有些行包含我想最初删除的额外信息,以便我可以将文件作为一个整体进行处理。
不幸的是,该行有很多特殊字符,我正在努力使用 sed 命令来匹配我想要删除的位...
该行包括以下内容:
[ParOldGen: 0K->0K(0K)] 0K->0K(0K), [Metaspace: 0K->0K(0K)], 0 secs]
该行包含我想要保留的上述字符串周围的其他信息,包括[]() 字符。
我要匹配
[ParOldGen*secs]
然后使用 sed 删除它
cat test.log | sed -e 's,<match>,,g' | ...
我去检查了一个正则表达式检查器,它提出了:
\[ParOldGen(?:(?!secs\])(?:.|\n))*secs\]
但是,它与 sed -e 不匹配,使用 sed -E 时出错
我不能轻易使用 cut,因为有太多其他部分有 [ 和 ]。
我正在尝试这样的事情:
cat test.log | while read line; do if [ "$line" == *"ParOldGen"* ];then cut -d ":" -f 1,9; else cut -d ":" -f 1,7; fi; done | tail
这将有效地解决它,但我无法在 ParOldGen 上获得匹配,它总是只执行 then 部分。
我的预期输出是我想删除 ParOldGen 行。
有人能帮我解决这个问题吗?
谢谢!
【问题讨论】:
-
你能从你的日志文件中提供更多的行吗?
-
你期待什么输出?
-
我要匹配的字符串总是我给定的格式 - 还有其他部分有 [ 和 ] 所以我不能使用 cut... 它在一行的中间所以没有容易使用的分隔符。我曾考虑过尝试使用 if 语句,但我想在一行代码中做到这一点。我也会提出我正在尝试的替代命令。
-
您要完全删除该行吗?
-
只是我确定的那部分行。
标签: regex linux bash macos sed