Запись отрицаемого шаблона с помощью расширенных регулярных выражений POSIX особенно сложна. Для случая строки типа domain
, где все символы разные, вы можете попробовать:
awk -v re="^([^d]|d*d[^do]|[do]*o(d*d[^do]|[^dm])|[dom]*m(d*d[^do]|[do]\
*o(d*d[^do]|[^dm])|[^da])|[doma]*a(d*d[^do]|[do]*o(d*d[^do]|[^dm])|[dom\
]*m(d*d[^do]|[do]*o(d*d[^do]|[^dm])|[^da])|[^di])|[domai]*i(d*d[^do]|[d\
o]*o(d*d[^do]|[^dm])|[dom]*m(d*d[^do]|[do]*o(d*d[^do]|[^dm])|[^da])|[do\
ma]*a(d*d[^do]|[do]*o(d*d[^do]|[^dm])|[dom]*m(d*d[^do]|[do]*o(d*d[^do]|\
[^dm])|[^da])|[^di])|[^dn]))*[domai]*\$" '$0 ~ re'
Я придумал это много лет назад и возвращаюсь к той моей статье всякий раз, когда мне нужно написать отрицательный regexp, но, должен признаться, я не помню, как я до этого дошел.