【问题标题】:grep exact value from string using regexp?使用正则表达式从字符串中grep精确值?
【发布时间】:2019-04-08 13:13:48
【问题描述】:

我在玩一些 docker 容器,我想知道如何从日志中获取容器创建时生成的密码。

所以我用

运行容器
$> docker container run --name mysql -p 3306:3306 -e MYSQL_RANDOM_ROOT_PASSWORD=yes -d mysql

这个命令用我可以从日志中得到的随机生成的密码启动一个新的 mysql 容器。确切地说,这个命令给出了其他传递:

$> docker container logs mysql
...
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
GENERATED ROOT PASSWORD: Poow3eet2aat6aePhae6leipeecagife

2019-04-07T08:00:18.945238Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.15)  MySQL Community Server - GPL.

这只是一个背景。当然,重要的部分是GENERATED ROOT PASSWORD 的行,您可以假设我实际上是从任何其他来源获得此文本文件的。我想将它存储在一些变量中,例如

export ROOT_PASS=$(expression)

为此,我需要提出仅返回随机生成的字符串的表达式。当然,或者我可以将正则表达式模式的匹配子字符串分配给变量。

我想到了

docker container logs mysql | grep -e "PASSWORD: .*"

但实际上这会导致整行并突出显示PASSWORD: Poow3eet2aat6aePhae6leipeecagife。我也想到了 sed 的一些东西:

docker container logs mysql | sed -e 's/PASSWORD: .*/$1/g'

...但这剥夺了有趣的部分,实际上返回了其他所有内容。

有什么建议吗?

【问题讨论】:

    标签: regex grep


    【解决方案1】:

    使用 GNU grep 追加:

    | grep -Po 'GENERATED ROOT PASSWORD: \K.*'
    

    或 GNU sed:

    | sed -n 's/^GENERATED ROOT PASSWORD: //p'
    

    输出:

    Poow3eet2aat6aePhae6leipeecagife

    见:What does '\K' mean in this regex?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 2015-07-10
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      相关资源
      最近更新 更多