对于家庭作业,我需要用来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 不适合这种情况,尝试使用getent
awk 获取密码文件并解析它(冒号分隔的内容),
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}'
只是为了获得非系统或内置用户。