Получить значения из строки с регулярным выражением в Bash - PullRequest
1 голос
/ 02 апреля 2019

У меня есть строка, и я хочу извлечь необходимые значения из этой строки, поэтому я написал несколько шаблонов регулярных выражений, искал в google и обнаружил, что должен использовать команду echo, а затем сохранить в переменной.

Я протестировал свой шаблон регулярных выражений на regex101.com, и шаблон правильный, но я не знаю, почему не работает в bash-скрипте.

это мой код:

output="VPC created: vpc-something
Security Group created: sg-something
Subnet created: subnet-something1
Subnet created: subnet-something2
Cluster creation succeeded."


regex1="/(VPC\screated:)\s+(.*)$/gm"
regex2="/(Subnet\screated:)\s+(.*)$/gm"

vpc=$(echo $output| grep -q $regex1)
subnet=$(echo $output| grep -q $regex2)

echo $vpc
echo $subnet

вывод этого кода ничто

Ответы [ 2 ]

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

Вы можете использовать

output="VPC created: vpc-something
Security Group created: sg-something
Subnet created: subnet-something1
Subnet created: subnet-something2
Cluster creation succeeded."


regex1="VPC +created:.*"
regex2="Subnet +created:.*"

vpc="$(echo "$output" | grep -Eo "$regex1" | sed -E 's/VPC +created: *//')"
subnet="$(echo "$output"| grep -Eo "$regex2" | sed -E 's/Subnet +created: *//')"

echo $vpc
for v in "$subnet"; do echo "$v"; done

См. онлайн-демонстрацию , вывод:

vpc-something
subnet-something1
subnet-something2

ПРИМЕЧАНИЕ

  • Переменные, содержащие пробелы, заключены в двойные кавычки (или появятся ошибки)
  • regex1 и regex2 - это шаблоны, которые просто соответствуют строкам VPC created: и Subnet created: + всем остальнымстроки, и эти "префиксы" должны быть удалены позже с помощью sed, который передается сразу после
  • -E с обоими grep и sed, позволяющими использовать синтаксис POSIX ERE, который ближе к используемому синтаксисус помощью «современных» движков регулярных выражений (это позволяет + квантификатор)
    • o grep опция говорит grep выводить совпавших текстов , а не всю строку, где совпадаютпроизошло.
1 голос
/ 02 апреля 2019

Параметр grep q означает «тихий», он предотвращает любой вывод на STDOUT.

Исправляет ли его удаление ваш код?

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