如何在使用固定模式的文件中查找哪一行缺少属性?

How to find which line has a missing attribute in a file that use a fixed pattern?

我有一个文件,其中包含密码已编码的 LDAP 用户列表。该文件始终具有相同的模式,如以下示例所示:

cn=user01,cn=users,dc=mycompany,dc=com,dc=ar
userpassword={SHA}sssFRwn116jjIF3EXEhecyFER=

cn=user02,cn=users,dc=mycompany,dc=com,dc=ar
userpassword={SHA}wwU3GCFOgidd5Z2h+jBKjsFER/w=

cn=user03,cn=users,dc=mycompany,dc=com,dc=ar
userpassword={SHA}GfGfptC2N43BDsfkqL6v0V+iFER=

cn=user04,cn=users,dc=mycompany,dc=com,dc=ar

cn=user05,cn=users,dc=mycompany,dc=com,dc=ar
userpassword={SHA}ZzZGptC2N43BFERkqL6v0V+ixUM=

我需要一些方法来确定哪个用户没有密码(在本例中为用户 'cn=user04'),或者至少使用以下方法获取文件中缺少密码的行号linux 控制台 and/or bash 脚本

似乎如果您使用 awk 以段落模式读取文件,您可以通过测试记录是否包含换行符来确定记录是否缺少 userpassword 属性。

$ awk -F, -vRS= '!/\n/{print }' file
cn=user04

这个解决方案有点 hack,但应该适用于实际情况:

fmt -w 999 input.txt|grep -v 'cn.*userpassword'

如果您遇到一个用户名为 userpassword 的用户,并且该用户没有设置密码,它将失败;这种情况你不会用这种方法识别出来。