Если ваш grep не поддерживает -P или --perl-regexp, и вы можете установить grep с поддержкой PCRE, например, "pcregrep", то ему не потребуются какие-либо параметры командной строки, такие как GNU grep, для принятия Perl-совместимого обычного выражения, вы просто бежите
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;};}"