Это регулярное выражение не делает то, о чем вы думаете. Давайте разберемся:
[a-zA-Z]
- [...]
обозначает класс символов. Что у вас есть, значит: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w , x, y, z (и заглавные версии). Это захватывает один символ ! Это не то, что вы хотите!
\.
- это период. Нужен обратный слеш, поскольку .
означает «любой символ».
[a-zA-Z]
- то же, что и выше.
|
- или подписать. Или то, что было раньше, или то, что приходит потом.
[^qwer*]
- захватывает любой отдельный символ, который не q
, w
, e
, r
или *
.
[^root]
- захватывает любой отдельный символ, который не r
, o
или t
.
Как вы видите, это не совсем то, что вы хотели. Попробуйте следующее:
lastlog | egrep -v '^(qwer|root$)' | egrep '^[a-zA-Z]+\.[a-zA-Z]+$'
В регулярных выражениях нельзя использовать оператор "не сопоставлять эту группу" ... Это не регулярно. Некоторые реализации все-таки предоставляют такую функциональность, а именно PCRE и пакет re
Python.