我想在某些用户名上找到lastlogin。我想要排除任何以qwer *和root开头的内容,但保留user.name
这是我已经拥有的,但正则表达式的最后一部分不起作用。任何帮助表示赞赏。
lastlog | egrep '[a-zA-Z]\.[a-zA-Z]|[^qwer*][^root]'
答案 0 :(得分:7)
正则表达式不符合你的想法。让我们分解一下:
[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
或{{1}的任何单个字符}}。*
- 捕获不 [^root]
,r
或o
的任何单个字符。正如您所看到的,这并不完全是您想要的。请尝试以下方法:
t
你在regexp中不能有“不匹配这个组”运算符......这不是常规的。有些实现确实提供了这样的功能,即PCRE和Python的lastlog | egrep -v '^(qwer|root$)' | egrep '^[a-zA-Z]+\.[a-zA-Z]+$'
包。
答案 1 :(得分:3)
这应该是你:
lastlog | egrep -v '^qwer|^root$'
grep的-v选项为您提供了不匹配的行而不是匹配的行。
如果您特别想要User.Name形式的用户名,那么您可以添加:
lastlog | egrep -v '^qwer|^root$' | egrep -i '^[a-z]*\.[a-z]*'