正確に一致する特定のユーザーグループメンバーシップを検索する

正確に一致する特定のユーザーグループメンバーシップを検索する

ユーザーにスペースを含む複数のグループメンバーシップがあります。例:

  • 私のメイン\スタッフ
  • 私のメイン\スタッフマネージャー
  • 私のメイン\スタッフスーパー

ユーザーグループは、以下を使用して返すことができます。

id -Gn username | grep -i -o '\bstaff\b'

残念ながら、ユーザーが "mydomain\staff admin" または "mydomain\staff super" のメンバーであるが "mydomain\staff" でない場合は、クエリが返されます。 "mydomain\staff" グループメンバーシップだけを検索するには?


要求に応じて、サンプル出力は次のようになります。

id -Gn username

次のように(すべて1行に):

mydomain\staff mydomain\staff 管理者 mydomain\staff super mydomain\他のグループ

ベストアンサー1

出力はスペースで区切られているためid -Gn使用できません。

idcoreutils 8.22以降、GNU実装には-z空白で区切られたリストの代わりにnullで区切られたリストを出力するオプションがあるので、これを行うことができます(すでにgrep使用されているように見えるGNUを使用して)。

id -Gzn username | grep -Fxz 'mydomain\staff'

または:

id -Gzn username | grep -z '\\staff$'

staff誰にでもフィールド(それは何でも)。

そうでない場合は、次のコマンドがあればgetent問題をリバースエンジニアリングできます。

staff_members=$(getent group 'mydomain\staff' | cut -d : -f 4-)
case ",$staff_members," in
  (*,username,*) printf '%s\n' 'username is member of mydomain\staff'
esac

おすすめ記事