Как сопоставить поля регулярных выражений в bash - PullRequest
0 голосов
/ 10 марта 2020

Сделал регулярное выражение, соответствующее полю, которое я хочу присвоить моей переменной в bash:

Регулярное выражение:

(\,?[ ]?(\.?\d{1,3}){4})+\ (.*)

, и интересующая меня подстрока составляет $ 3 (группа 3)

Может ли кто-нибудь дать мне командную строку для назначения подстроки моей переменной?

Пример:

MYVARIABLE=$(echo $FULLSTRING | grep -oP '(\,?[ ]?(\.?\d{1,3}){4})+\ (.*)'

Но этот пример, очевидно, не сработал

Большое спасибо

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Вы можете извлечь значение группы 3, используя Bash соответствие регулярному выражению:

text="1.23.23.45 This is what I want"
rx='(,? ?(\.?[0-9]{1,3}){4})+ (.*)'
if [[ $text =~ $rx ]]; then
 echo "${BASH_REMATCH[3]}"
else
 echo "No match!"
fi

См. онлайн Bash демо печать This is what I want.

Если есть совпадение с регулярным выражением (if [[ $text =~ $rx ]]), содержимое группы 3 находится в "${BASH_REMATCH[3]}".

0 голосов
/ 10 марта 2020

Если у вас установлено Perl, вы можете сопоставить его с регулярным выражением и напечатать нужное поле:

MYVARIABLE=$(echo $FULLSTRING | perl -nE '/(\,?[ ]?(\.?\d{1,3}){4})+\ (.*)/;say $3')

Пример:

FULLSTRING=', .123.4.5.6 matchthis'
MYVARIABLE=$(echo $FULLSTRING | perl -nE '/(\,?[ ]?(\.?\d{1,3}){4})+\ (.*)/;say $3')
echo $MYVARIABLE

Выходы: matchthis


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