Описание тега wengen
Ваша главная проблема в этой строке
кошка $именем | грэп {1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\} \Р"
Не только бесполезное использование кошка, главная ошибка заключается в том, что {1,3}
означает "соответствовать 1,2 или 3" раз, но ты не сказал он , что , чтобы соответствовать. Синтаксис тоже неправильно, {}
должны быть экранированы для регулярных грэп
. То, что вы ищете, лучше записать так:
грэп -Ро 'и\D{1,3}\.\д{1,3}\.\д{1,3}\.\д{1,3}' именем
Это использует использование PCRE синтаксис (-П
) где \Д
означает "цифр" и которые я нахожу легче, но использовать стандартные команды grep
регулярные выражения (Бресия), вы могли бы сделать:
грэп -о '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
О
-о
делаетgrep в
печати только совпадающие части линии.Вы никогда не хотите, чтобы соответствовать символ конца строки, нет необходимости. Вы всегда должны попробовать и сделать ваши регулярные выражения как можно более простым. Это всегда лучше, чтобы использовать самым маленьким, простое выражение, которое соответствует вашим данным.
Вы наверняка не хотите искать
\Р
. Пока Windows не конец строки с\р\н
, большинство систем не и в любом случае, нет смысла искать его. Если вы должны соответствовать до конца строки, используйте$
, который будет работать во всех случаях.
В любом случае, чтобы сохранить в переменной этого:
ИС=$(грэп -Ро 'и\D{1,3}\.\д{1,3}\.\д{1,3}\.\д{1,3}' именем)
Вы можете сейчас Эхо $ИС
для печати ИС.
На основе вашего последнего редактирования, я предполагаю, что вы хотите ИС определяются тегом IP-адрес. Я сейчас дам вам обязательное предупреждение: никогда не используйте регулярные выражения для разбора XML или аналогичных форматов. Тем не менее, чтобы получить только IP-адрес IP-адрес, сделать это:
ИС=$(грэп -Ро 'ip_v4="\к[0-9.]+' $имя_файла)
В к\
отбрасывает все, что было подобрано до него, так что вы получите только IP часть и поскольку вы знаете, что вы ищете всегда предшествует ip_v4="
, можно просто искать самую длинную строку, содержащую только цифры и .
.