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

moo*_*oon 2 grep users text-processing

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

grep -i etc/password | .... >allusers 
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Mic*_*zek 11

暗示

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

回答

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

grep -oE '^[^:]+' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

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

如果您能够使用除 之外的其他工具grep,这里有其他通常更好的方法:

cut -d: -f1 /etc/passwd
sed 's/:.*//' /etc/passwd
awk -F: '{print $1}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

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

  • 虽然这是正确的并且是一个很好的答案,但我不会超出提示,因为这是 OP 的作业 (6认同)