正则表达式:在该行的两个单词中匹配7个相同字母的行

时间:2013-05-23 15:59:37

标签: regex grep

我有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在这里我做了最多,我只是不知道为什么它不工作。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

这个grep应该可以工作:

grep -iP '([^:])([^:])([^:])([^:])([^:])([^:])([^:])([^:]*:){4}[^:]*?\1\2\3\4\5\6\7'