一行程序打印以“1”开头的组及其编号?

一行程序打印以“1”开头的组及其编号?

我必须编写一个一行程序来打印系统组及其标识符,对于所有标识符以“1”开头的组。例如,cat命令 on的结果/etc/group如下:

我必须打印:

users 100 
libuuid 101 
netdev 102 
crontab 103
........
penny 1002 
leonard 1003 
sheldon 1004

答案1

您可以使用AWK它来更有效地做到这一点。

$ awk -F: '$3 ~ /^1/ {print $1, $3}' /etc/group
daemon 1
uucp 10
man 12
proxy 13
kmem 15
users 100
libuuid 101
crontab 102
fuse 103
avahi-autoipd 104
scanner 105
messagebus 106
colord 107

答案2

注意到任何以 1 开头的组及其相应组编号的一致模式吗?

$ head -20 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:logcheck
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:saml
cdrom:x:11:
mail:x:12:
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:30:
video:x:39:
ftp:x:50:

我立即想到的一种模式是所有组编号都以冒号作为前缀::1例如,您可以查找包含 的行。

由于我们正在讨论在文件中查找模式,因此您应该立即想到该工具grep.该工具可以查找模式,然后打印出包含该模式的相应行。

因此,如果我们对我们所知道的位进行一些组装:

$ grep ":1" /etc/group
bin:x:1:
wheel:x:10:saml
cdrom:x:11:
mail:x:12:
man:x:15:
dialout:x:18:
floppy:x:19:
users:x:100:
systemd-journal:x:190:
systemd-journal-gateway:x:191:
usbmuxd:x:113:
qemu:x:107:
rtkit:x:172:
abrt:x:173:
avahi-autoipd:x:170:
oprofile:x:16:
mock:x:135:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:

格式化输出

如果您必须格式化上述输出以使其符合以下要求:

user 123

然后你可以用它sed来清理它:

$ grep ":1" /etc/group | sed 's/:\(x:\)*/ /g' | head -5
bin 1 
wheel 10 saml
cdrom 11 
mail 12 
man 15 

head命令只是将这里的输出限制为 5 行。

相关内容