从 grep 输出中隐藏部分匹配

rɑː*_*dʒɑ 6 grep regular-expression

我有一个用于会话 ID 提取的正则表达式:

[root@docker tmp]# grep -oE "\[[0-9].+\]" logfile
[113a6d9e-7b06-42c6-a52b-7a4e4d2e216c]
[113a6d9e-7b06-42c6-a52b-7a4e4d2e216c]
[root@docker tmp]#
Run Code Online (Sandbox Code Playgroud)

如何从输出中隐藏方括号?

Spa*_*awk 6

不要使用extended-regex grep ( -E),而是使用perl-regex grep ( -P),带有后视和前瞻。

$ grep -oP "(?<=\[)[0-9].+(?=\])" logfile
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c
Run Code Online (Sandbox Code Playgroud)

此处,(?<=\[)表示应该有一个前面的\[,并(?=\])表示应该有一个后面的\],但不要将它们包含在匹配输出中。