gpt4 book ai didi

linux - 从包含 ANSI 转义属性的 gitlab-runner 输出中解析 token 值

转载 作者:太空狗 更新时间:2023-10-29 11:49:25 25 4
gpt4 key购买 nike

目前我正在尝试从 gitlab-runner list 中获取一个 token ,它会输出类似这样的内容:

Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
Ursain Bolt Executor=docker Token=abcdef678901234567890123456789 URL=https://my.gitlab.com

我正在搜索 token 是否存在:Token=abcdef678901234567890123456789

我尝试了几种模式(我熟悉正则表达式),我更喜欢使用的模式如下所示:

gitlab-runner list 2>&1 >/dev/null | grep -E 'Token=[a-f0-9]{30}'

I redirect stderr to stdout since it seems gitlab-runner prints to stdout. Not piping stdout to /dev/null makes no difference here.

这个模式不匹配。

我成功地尝试了(grep 返回 0)以下匹配项:

  • [a-f0-9]+
  • ([a-f0-9])+'
  • ([a-f0-9]){30}
  • token
  • token 。

但是,以下匹配项没有有效(grep 返回1):

  • ( token .[a-f0-9]){30}
  • Token=[a-f0-9]{30}
  • token =
  • token \=

我缺少什么,为什么两种模式(Token[a-f0-9]{30})与等号的常规组合不起作用?


原始 Gitlab-Runner 输出

bash-4.3# gitlab-runner list 2>&1 >/dev/null
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
Ursain Bolt Executor=docker Token=abcdef678901234567890123456789 URL=https://my.gitlab.com

部分十六进制转储更新

...
000000a0: 2045 7865 6375 746f 721b 5b30 3b6d 3d64 Executor.[0;m=d
000000b0: 6f63 6b65 7220 546f 6b65 6e1b 5b30 3b6d ocker Token.[0;m
000000c0: 3d65 6466 3834 3062 3436 6166 6434 3333 =edf840b46afd433
...

版本号

bash-4.3# cat /etc/alpine-release
3.6.2

bash-4.3# bash --version
GNU bash, version 4.3.48(1)-release (x86_64-alpine-linux-musl)

bash-4.3# grep --version
grep (GNU grep) 3.0
Copyright (C) 2017 Free Software Foundation, Inc.

尝试通过回显输出来重现这一点似乎不起作用,grep 按预期匹配模式。

最佳答案

如果您使用的是 GNU grep,请使用它附带的 PCRE 库。 -P 标志启用它并且 -o 标志仅返回匹配的组而不是整行。 \K是保留字符,表示忽略匹配字符串中直到该部分的字符串。

grep -Po 'Token=\K[a-f0-9]{30}'

grep -E 'Token=[a-f0-9]{30}' 的问题是它会返回匹配正则表达式的整行,单独匹配组,因为您要查找的字符串是包含其他单词的一行的一部分。您当然可以在原始表达式中使用 -o 标志,但它仍会返回 Token=abcdef678901234567890123456789


作为旁注,您可能希望确保您的 Token= 字符串在哪个输出流中可用,因为根据您当前的重定向 2>&1 >/dev/null 您正在将整个 stdout 抑制为空流并仅将 stderr 重定向到控制台,而 grep 仅对此起作用。

更新

因此,如果您的问题出在 ANSI escape sequences 上,您需要使用 sed 或您选择的任何工具清理输出并应用 grep 正则表达式过滤器,例如

gitlab-runner list 2>&1 >/dev/null | s/.\[0;m//g | grep -Po 'Token=\K[a-f0-9]{30}'

关于linux - 从包含 ANSI 转义属性的 gitlab-runner 输出中解析 token 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46562048/

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