需要regex从Unix id命令中提取组



我需要从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

最新更新