我有一个关于在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编号的命令和适当的命令(如果可能,请显示多种方式,以便我进一步进行研究)?
不需要“通配符”或正则表达式的一种方法是使用cut
。cut
可以处理文本文件中指定字符分隔的行,/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
可以做更多的事情cut
,awk
因为默认情况下使用空白运行来分隔令牌。与摆弄cut
字段分隔符规范相比,这可以节省时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句