我有一个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
答案 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