如何检查姓氏的前4个字符和姓氏的前4个字符

时间:2019-06-05 15:00:32

标签: regex grep posix

我有一个UNIX密码文件,我需要使用grep 查找以下条目:

  

姓氏中的前4个字符和姓氏中的前4个字符位于用户名内。

这是我的尝试:

grep -iE '^[^:]*([^:]{4})[^:]*([^:]{4})([^:]*:){4}(\1|\2)[^: ]* (\1|\2)'

它实际上在以下几行中匹配:

ldapsync:x:1118:65534:LDAP Synchronization,,,:/home/system/ldapsync:/bin/tcsh
johnkene:x:1943:1056:John Kennedy:/home/user/johnkene:/bin/tcsh

但是在以下这些行中不匹配:

camad15:x:2674:1000:CAMAD2015 CAMAD2015:/home/user/camad15:/bin/sh

1 个答案:

答案 0 :(得分:3)

由于每个记录都由字符分隔,因此此工作比if color.lower() == 'blue':更适合awk

您可以使用此grep

awk

awk -F: '{
   split($5, a, / /)
   f4 = tolower(substr(a[1], 1, 4))
   l4 = tolower(substr(a[2], 1, 4))
}
index($1, f4) && index($1, l4)' /etc/passwd