我需要从 Unix id 命令输出中提取组名。我试过但无法编写正则表达式。id 命令的示例输出是:
uid=xxxxxx(amit) gid=xxxxxxx(xxxxxx) groups=xx(xxxx),xxxxxx(xxxxxx),xxxxx(xxxxx)
之后如何提取括号中的字符串groups=
?
如果您的版本支持它,最简单的事情是:id
$ id -nG
group1 group2 group3
查看man id
可用选项:
-G, --groups
print all group IDs
-n, --name
print a name instead of a number
如果您确实想知道如何使用正则表达式进行解析,您可以执行以下操作。
这个正则表达式(?<=\()[^)]+(?=\)(,|$))
将完成这项工作,它使用正向超前和后向来匹配括号内的字符串,后跟逗号或字符串的结尾。与GNU grep
:
$ id | grep -Po '(?<=\()[^)]+(?=\)(,|$))'
group1
group2
group3
如果您没有GNU grep
哪个支持PCRE,那么您可以放弃环视并使用以下内容进行过滤sed
:
$ id | grep -Eo '\([^)]+\)(,|$)' | sed 's/[),(]//g'
group1
group2
group3