0

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

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

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

4

1 回答 1

1

如果您的版本支持它,最简单的事情是: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
于 2013-03-11T08:39:50.093 回答