Если ваш grep не поддерживает -P или --perl-regexp, и вы можете установить grep с поддержкой PCRE, например, «pcregrep», тогда для запуска регулярных выражений, совместимых с Perl, не потребуются никакие параметры командной строки, такие как GNU grep, просто запустите
pcregrep "Ui\.(?!Line)"
Вам не нужна другая вложенная группа для «Line», как в вашем примере «Ui. (?! (Line))» - достаточно внешней группы, как я уже показал выше.
Позвольте мне привести еще один пример того, как выглядят отрицательные утверждения: когда у вас есть список строк, возвращаемых «ipset», каждая строка показывает количество пакетов в середине строки, и вам не нужны строки с нулевыми пакетами. просто запускаешь:
ipset list | pcregrep "packets(?! 0 )"
Если вам нравятся регулярные выражения, совместимые с perl, и у вас есть perl, но нет pcregrep, или ваш grep не поддерживает --perl-regexp, вы можете написать однострочные сценарии perl, которые работают так же, как и grep:
perl -e "while (<>) {if (/Ui\.(?!Lines)/){print;};}"
Perl принимает stdin так же, как и grep, например,
ipset list | perl -e "while (<>) {if (/packets(?! 0 )/){print;};}"