Якщо ваша grep не підтримує -P або --perl-regexp, і ви можете встановити grep з підтримкою PCRE, наприклад, "pcregrep", то для прийняття регулярного сумісного з Perl не потрібні такі параметри командного рядка, як GNU grep вирази, ти просто біжиш
pcregrep "Ui\.(?!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;};}"