Jeśli twój grep nie obsługuje -P lub --perl-regexp i możesz zainstalować grep z obsługą PCRE, np. "Pcregrep", to nie będzie potrzebował żadnych opcji wiersza poleceń, takich jak GNU grep, aby zaakceptować zwykły zgodny z Perl wyrażenia, po prostu uciekasz
pcregrep "Ui\.(?!Line)"
Nie potrzebujesz kolejnej grupy zagnieżdżonej dla „Linii”, jak w Twoim przykładzie „Ui. (?! (Linia))” - zewnętrzna grupa jest wystarczająca, jak pokazałem powyżej.
Pozwólcie, że podam inny przykład szukania negatywnych twierdzeń: kiedy masz listę wierszy, zwracaną przez "ipset", każda linia pokazuje liczbę pakietów w środku linii i nie potrzebujesz linii z zerowymi pakietami, po prostu biegać:
ipset list | pcregrep "packets(?! 0 )"
Jeśli lubisz wyrażenia regularne kompatybilne z perlem i masz perl, ale nie masz programu pcregrep lub twój grep nie obsługuje --perl-regexp, możesz użyć jednowierszowych skryptów perl, które działają tak samo jak grep:
perl -e "while (<>) {if (/Ui\.(?!Lines)/){print;};}"
Perl akceptuje stdin w taki sam sposób jak grep, np
ipset list | perl -e "while (<>) {if (/packets(?! 0 )/){print;};}"