我需要从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
如果您真的想知道如何使用正则表达式进行解析,您可以执行以下操作。
这个regexp (?<=()[^)]+(?=)(,|$))
将完成这项工作,它使用正向向前看和向后看来匹配括号内的字符串,后面跟着逗号或字符串的结尾。与GNU grep
:
$ id | grep -Po '(?<=()[^)]+(?=)(,|$))'
group1
group2
group3
如果你没有支持PCRE的GNU grep
,那么你可以使用sed
:
$ id | grep -Eo '([^)]+)(,|$)' | sed 's/[),(]//g'
group1
group2
group3