我只希望grep来自/etc/passwd的组ID。现在,我只想出了如何实现grep的名称,包括:
grep -oE '^[^:]+' /etc/passwd这给了我:
[frynio@manjaro ~]$ grep -oE '^[^:]+' /etc/passwd
root
nobody
dbus
bin
daemon
mail
ftp
http
systemd-journal-remote
systemd-coredump
uuidd
dnsmasq
rpc
usbmux
avahi
colord
cups
deluge
git
lightdm
nm-openconnect
nm-openvpn
ntp
polkitd
frynio我如何更改这个正则表达式,省略前三个:s,然后开始与[^:]+匹配?(因为^在与行的开头匹配之前,这就是为什么我可以提取名称,并且我希望在3个冒号后匹配位置)。
我必须使用grep
发布于 2018-10-28 22:38:33
如果您使用的是grep (这是linux上的缺省值),您可以使用-P选项和一个前瞻性断言来实现它:
grep -Po '[0-9]+(?=(?::[^:]*){3}$)' /etc/passwd发布于 2018-10-28 21:55:57
允许使用两个grep进程吗?如果是,试着:
grep -oE '^([^:]+:){3}[^:]+' /etc/passwd | grep -oE '[^:]+发布于 2018-10-28 22:30:51
是否允许使用pcregrep而不是常规的grep?如果允许,您可以这样做。
pcregrep -o2 '^([^:]+:){3}([^:]+)' /etc/passwdpcregrep扩展了-o选项的功能,使其与分组子字符串匹配。在上面命令中的正则表达式中,[^:]+:匹配passwd文件字段,因此^([^:]+:){3}匹配前三个字段(用户名、密码字段和UID). ,下面的([^:]+)是regex中的第二个组,匹配第四个字段,即GID。-o2标志告诉pcregrep只输出第二个组。
https://unix.stackexchange.com/questions/478296
复制相似问题