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
正規表現で解析する方法を本当に知りたい場合は、次のことができます。
この正規表現(?<=\()[^)]+(?=\)(,|$))
はその仕事を行い、正先読みと後読みを使用して、括弧内の文字列とそれに続くコンマまたは文字列の末尾を照合します。とGNU grep
:
$ id | grep -Po '(?<=\()[^)]+(?=\)(,|$))'
group1
group2
group3
GNU grep
どのサポートPCREがない場合は、ルックアラウンドをドロップして次のようにフィルタリングできますsed
。
$ id | grep -Eo '\([^)]+\)(,|$)' | sed 's/[),(]//g'
group1
group2
group3