打印/ etc / passwd的某些字段

现金

我有一个关于在Linux中使用通配符的问题。在这里,我从/ etc / passwd -file中的一长串行中找到了几行。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
...

什么是从此行仅打印出用户名,UID编号和GID编号的命令和适当的命令(如果可能,请显示多种方式,以便我进一步进行研究)?

布鲁斯·埃迪格(Bruce Ediger)

不需要“通配符”或正则表达式的一种方法是使用cutcut可以处理文本文件中指定字符分隔的行,/etc/passwd恰好是这样。

cut -d: -f1,3,4 /etc/passwd

输出将具有冒号分隔的字段。看起来GNUcut还有一个额外的选项“ --output-delimiter”,但是您也可以使用tr

cut -d: -f1,3,4 /etc/passwd | tr ':' '\t'

可以这样cut工作的选项

  • -d:-使用冒号作为字段分隔符。默认为制表符。
  • -f1,3,4-输出字段1、3和4cut使用1索引字段,从行的左侧开始。字段2为“ x”,其中加密密码出现在过去。

awk命令也可以工作:

awk -F : '{print $1, $3, $3}' /etc/passwd

-F :选项指示awk使用冒号分隔字段。awk从左到右将一行中的字段表示为$ 1,$ 2,$ 3...。$ 0保留整行,这通常是您要打印的内容,但是这次不行。

sed 可以做到这一点:

sed 's/^\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):..*/\1 \3 \4/' /etc/passwd 

sed命令中,我们最终进入“通配符”,尽管在这种情况下它们看起来很丑陋。

我的建议是更喜欢该cut命令。sed示例表明,要获取所需内容的正则表达式可能很难看,因此很难正确。awk可以做更多的事情cutawk因为默认情况下使用空白运行来分隔令牌。与摆弄cut字段分隔符规范相比,这可以节省时间

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章