grep точное значение из строки, используя регулярное выражение? - PullRequest
1 голос
/ 07 апреля 2019

Я дурачусь с некоторыми докерными контейнерами, и мне интересно, как я могу получить пароль, сгенерированный при создании контейнера из журналов.

Итак, я запускаю контейнер с

$> 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'

... но это лишило интересную часть и фактически вернуло все остальное.

Есть предложения?

1 Ответ

2 голосов
/ 07 апреля 2019

Добавить с помощью GNU grep:

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

или GNU sed:

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

Вывод:

Poow3eet2aat6aePhae6leipeecagife

См .: Чтоозначает "\ K" в этом регулярном выражении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...