需要正则表达式从Unix id命令中提取组

时间:2013-03-11 06:34:19

标签: regex linux unix grep

我需要从Unix id命令输出中提取组名。我试过但不能写正则表达式。 id命令的示例输出是:

uid=xxxxxx(amit) gid=xxxxxxx(xxxxxx) groups=xx(xxxx),xxxxxx(xxxxxx),xxxxx(xxxxx)

如何在groups=之后在括号中提取字符串?

1 个答案:

答案 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

如果您没有支持PCREGNU grep,那么您可以删除环视并使用sed进行过滤:

$ id | grep -Eo '\([^)]+\)(,|$)' | sed 's/[),(]//g'
group1
group2
group3