我需要从Unix id命令输出中提取组名。我试过但不能写正则表达式。 id命令的示例输出是:
uid=xxxxxx(amit) gid=xxxxxxx(xxxxxx) groups=xx(xxxx),xxxxxx(xxxxxx),xxxxx(xxxxx)
如何在groups=
之后在括号中提取字符串?
答案 0 :(得分:1)
如果您的id
版本支持,最简单是:
$ id -nG
group1 group2 group3
有关可用选项,请参阅man id
:
-G, --groups
print all group IDs
-n, --name
print a name instead of a number
如果您确实想知道如何使用正则表达式进行解析,则可以执行以下操作。
这个正则表达式(?<=\()[^)]+(?=\)(,|$))
将完成这项工作,它使用positive-lookahead and look-behind匹配括号内的字符串,后跟逗号或字符串的结尾。使用GNU grep
:
$ id | grep -Po '(?<=\()[^)]+(?=\)(,|$))'
group1
group2
group3
如果您没有支持PCRE的GNU grep
,那么您可以删除环视并使用sed
进行过滤:
$ id | grep -Eo '\([^)]+\)(,|$)' | sed 's/[),(]//g'
group1
group2
group3