我有passwd文件,每行都是这样的:
abcdefg:x:2029:1040:Hasan abcdefg:/home/student/x0203/abcdefg:/bin/bash
ijklmnop:x:2029:1040:Bob ijklmnop:/home/student/x0203/ijklmnop:/bin/bash
man:x:2029:1040:Sponger man:/home/student/x0203/ijklmnop:/bin/bash
我希望匹配用户名中包含7个字母或更多字母的所有行,例如我想要匹配的上述行:
abcdefg:x:2029:1040:Hasan abcdefg:/home/student/x0203/abcdefg:/bin/bash
ijklmnop:x:2029:1040:Bob ijklmnop:/home/student/x0203/ijklmnop:/bin/bash
我写了下面的内容:
egrep '.*(.)(.)(.)(.)(.)(.)(.).*[:].*[:].*[:].*[:].*\1\2\3\4\5\6\7.*[:].*[:].*' passdw
但这仅匹配具有7个字母用户名的用户
abcdefg:x:2029:1040:Hasan abcdefg:/home/student/x0203/abcdefg:/bin/bash
这是一个学校项目,我必须使用grep和正则表达式,所以awk不会这样做。我不要求整个awnser在这里我做了最多,我只是不知道为什么它不工作。
答案 0 :(得分:3)
不要使用正则表达式!编写一个简单的解析器,将字段拆分,然后比较用户名和名称。
答案 1 :(得分:1)
这个grep应该可以工作:
grep -iP '([^:])([^:])([^:])([^:])([^:])([^:])([^:])([^:]*:){4}[^:]*?\1\2\3\4\5\6\7'