I want to find the lastlogin on certain usernames. I want to exclude anything starting with qwer* and root but keep anything with user.name
Here is what I have already, but the last part of the regex doesn't work. Any help appreciated.
lastlog | egrep '[a-zA-Z]\.[a-zA-Z]|[^qwer*][^root]'
That regexp doesn't do what you think it does. Lets break it down:
[a-zA-Z] - the [...] denotes a character class. What you have means: 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 (and the capital versions). This captures a single character! That's not what you want!\. - this is a period. Needs the backslash since . means "any character".[a-zA-Z] - same as above.| - or sign. Either what came before, or what comes afterwards.[^qwer*] - Captures any single character that's not q, w, e, r, or *.[^root] - Captures any single character that's not r, o, or t.As you can see, that's not exactly what you were going for. Try the following:
lastlog | egrep -v '^(qwer|root$)' | egrep '^[a-zA-Z]+\.[a-zA-Z]+$'
You can't have "don't match this group" operator in regexps... That's not regular. Some implementations do provide such functionality anyway, namely PCRE and Python's re package.
This should do you:
lastlog | egrep -v '^qwer|^root$'
The -v option to grep gives you the non-matching lines rather than the matching ones.
And if you specifically want user names only of the form User.Name then you can add this:
lastlog | egrep -v '^qwer|^root$' | egrep -i '^[a-z]*\.[a-z]*'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With