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 に答える