gpt4 book ai didi

regex - 编写 bash sed 命令时遇到问题 - 正则表达式匹配

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:51 25 4
gpt4 key购买 nike

我有一个充满了不规则垃圾收集信息的文件,有些行包含我想首先删除的额外信息,以便我可以将文件作为一个整体进行处理。

不幸的是,该行有很多特殊字符,我正在努力使用 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 行。

有人能帮我解决这个问题吗?

谢谢!

最佳答案

我正在假设您要删除以 [ParOldGen 开头的整个字符串。并以 secs] 结尾从文件中的每一行。在这种情况下,您可以使用以下 sed命令:

sed -e 's/^\(.*\)\[ParOldGen.*secs\]\(.*\)$/\1\2/' test.log

正则表达式抓取 [ParOldGen 之前的任何字符到一个捕获组,以及 secs] 之后的任何字符进入另一个。然后整行被这两个捕获组替换,有效地从 [ParOldGen 中删除字符。至secs] 。例如如果 test.log 包含:

[Some other data (4) ][ParOldGen: 0K->0K(0K)] 0K->0K(0K), [Metaspace: 0K->0K(0K)], 0 secs] and then some more [possibly also with ()]

cat test.log | sed -e 's/^\(.*\)\[ParOldGen.*secs\]\(.*\)$/\1\2/'的输出是

[Some other data (4) ] and then some more [possibly also with ()]

关于regex - 编写 bash sed 命令时遇到问题 - 正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52049968/

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