Regex и Bash file - извлекают данные из другого файла и сохраняют в переменной - PullRequest
0 голосов
/ 22 октября 2018

Пока я изучаю RegEX, я пытаюсь создать скрипт bash для извлечения данных из файла, а затем сохранить его в переменных, чтобы я мог работать с сохраненными значениями для автоматизации моего скрипта.

Я знаю существование SED и GREP, но я не уверен, как правильно их использовать.

Мне нужно значение в файле с именем: /path/to/config.inc.php

mysql: // user: password @ server / user_database

Поэтому, пока я изучал RegEX (используя для изучения веб-сайт https://regexr.com/), я смогчтобы создать это выражение RegEX:

(mysql\:\/\/)(.+.)\:(.+.)@(.+.)\/(.+)

Поэтому в основном мне нужно, чтобы значения USER, PASSWORD и USER_DATABASE были сохранены в сценарии в переменных, таких как:

user = $2
password = $3
userdatabase = $5

Так что я мог бы вызватьпеременные внутри скрипта bash для автоматизации некоторых вещей.Каков наилучший подход к этому?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Хотя ответ с регулярным выражением абсолютно нормален, я думаю, что есть еще один более простой подход.(И я люблю регулярные выражения BTW).

Учтите это:

mysql: // пользователь: пароль @ сервер / база данных пользователей

cut -d"@" -f1

mysql: // пользователь: пароль

cut -d"/" -f3

пользователь: пароль

cut -d":" -f1

пользователь

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

Есть шутка, в которой что-то звучит так:

Есть проблемы?Используйте регулярные выражения, чтобы решить это!Теперь у вас есть две проблемы;)

0 голосов
/ 22 октября 2018

Вы можете использовать sed + read:

read un pw db < <(sed -En '
s#.*mysql://([^:]+):([^@]+)@[^/]+/([_[:alnum:]]+).*#\1 \2 \3#p' config.inc.php)

# check variable content

declare -p un pw db
declare -- un="user"
declare -- pw="password"
declare -- db="user_database"

Подробности RegEx:

  • .*mysql://: сопоставить весь текст до mysql://
  • ([^:]+): сопоставить 1+ не двоеточие и захват в группе # 1
  • :: сопоставить буквенное двоеточие
  • ([^@]+): сопоставить 1+ не- @ символ и захват в группе # 2
  • @: совпадение литерала @
  • [^/]+/: совпадение 1+ с не- / символом, за которым следует /
  • ([_[:alnum:]]+): сопоставить 1+ символов слова и захватить в группе # 2
  • .*: сопоставить любой оставшийся текст до конца
  • Замена составляет \1 \2 \3, что составляет username password database значения в этой последовательности.
...