1

我有 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,我只是不知道为什么它不工作。

4

2 回答 2

3

不要为此使用正则表达式!编写一个简单的解析器,将字段分开,然后比较用户名和名称。

于 2013-05-23T16:05:26.993 回答
1

这个 grep 应该可以工作:

grep -iP '([^:])([^:])([^:])([^:])([^:])([^:])([^:])([^:]*:){4}[^:]*?\1\2\3\4\5\6\7'
于 2013-05-23T16:09:47.883 回答