Как проверить, появляются ли первые 4 символа имени и первые 4 символа фамилии в имени пользователя - PullRequest
1 голос
/ 05 июня 2019

У меня есть файл паролей 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 Ответ

3 голосов
/ 05 июня 2019

Это задание больше подходит для 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

ldapsync:x:1118:65534:LDAP Synchronization,,,:/home/system/ldapsync:/bin/tcsh
camad15:x:2674:1000:CAMAD2015 CAMAD2015:/home/user/camad15:/bin/sh
...