Моя проблема в регулярном выражении. Благодаря regexr мне удалось написать выражение , соответствующее имени интерфейса, которое мне дала команда linux route .

Но я не могу поймать это с:

route | grep -Eo "(?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$"

Это почему?

1 ответ1

2

Разные программы (и разные версии указанной программы) могут использовать разные реализации регулярных выражений. Попробуйте уменьшить или разбить ваше регулярное выражение по частям, чтобы узнать, какая функция поддерживается / не поддерживается.

Например, мне нужно удалить спецификатор группы без захвата ?: Из вашего примера, чтобы мой GNU grep мог работать так, как ожидается в Solaris 11.

Или вы можете попробовать заменить -E на -P чтобы использовать механизм регулярных выражений Perl, который, в моем случае, позволяет моему GNU grep запускать ваше регулярное выражение без дальнейших изменений.

route | grep -Po "(?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$"

Примечание: GNU grep в Solaris 11 находится в /usr/gnu/bin/grep

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .