通过 grep /etc/passwd 获取用户列表

通过 grep /etc/passwd 获取用户列表

对于家庭作业,我需要用来grep解析/etc/passwd并获取所有用户的列表(只有他们的用户名,没有其他)。它应该使用管道,并且结果应该最终出现在allusers文件中。这是我到目前为止所拥有的:

grep -i etc/password | .... >allusers 

我缺少什么?

答案1

暗示

一行中的每个字段/etc/passwd都用冒号分隔,用户名是第一个字段,因此您需要过滤每一行以仅显示第一个冒号之前的字符

回答

grep甚至还不是执行此操作的最佳工具,但如果您需要使用它,这将起作用:

grep -oE '^[^:]+' /etc/passwd

-o告诉它只返回行中匹配的部分。-E打开扩展正则表达式,以便+稍后可以使用。^匹配行的开头,[^:]匹配除冒号之外的任何内容,并且+表示尽可能多的字符。所以这将匹配每行的开头,直到第一个冒号

如果您能够使用除此之外的其他工具grep,那么以下是其他通常更好的方法:

cut -d: -f1 /etc/passwd
sed 's/:.*//' /etc/passwd
awk -F: '{print $1}' /etc/passwd

您可以将其中任何一个的结果重定向到allusers使用> allusers,就像您在示例中一样

答案2

grep 不适合这种情况,尝试使用getentawk 获取密码文件并解析它(冒号分隔的内容),

getent passwd | awk -F ':' '{print $1}' > allusers

答案3

cat /etc/passwd | awk -F : '{print $1}' > alluser.txt

答案4

我在用着:

grep -E 1[0-9]{3}  /etc/passwd | sed s/:/\ / | awk '{print $1}'

只是为了获得非系统或内置用户。

相关内容