如何处理/etc/passwd筛选全名(非登录名)首字母为A/Z的用户并导出信息
/etc/passwd筛选指定用户命令修正方案
问题原因
你原先使用的命令cat /etc/passwd | grep -i '^A\|^Z' > ex.list存在逻辑错误:^A\|^Z匹配的是整行开头的字符,对应/etc/passwd的第一个字段(登录用户名),完全没有命中你要筛选的第5个字段(全名/GECOS字段),因此会输出大量不符合要求的结果。
推荐修正方案
awk天生适配冒号分隔的结构化文本处理,逻辑更清晰不易出错,命令如下:
awk -F: 'tolower(substr($5,1,1)) ~ /^[az]$/{print $1,$5,$6}' /etc/passwd > ex.list
参数说明:
-F:指定字段分隔符为冒号,匹配/etc/passwd的默认分隔规则tolower(substr($5,1,1))提取第5个字段(全名)的第一个字符并转为小写,实现不区分大小写的匹配效果~ /^[az]$/校验首字母是否为a或zprint $1,$5,$6输出符合要求用户的登录名、全名、家目录,默认以空格分隔;如果需要用冒号分隔,可改为print $1":"$5":"$6
grep实现方案(可选)
如果你坚持用grep实现,也可以调整匹配规则定位到第5字段:
grep -i '^[^:]*:[^:]*:[^:]*:[^:]*:[az]' /etc/passwd | cut -d: -f1,5,6 > ex.list
内容的提问来源于stack exchange,提问作者manjitolo
相关产品推荐
相关产品推荐

