Isso funciona para dois grupos por vez:
getent group dell hp | cut -d: -f 4 | tr , '\n' | sort | uniq -d | sed ':a;$s/\n/, /g;N;ba'
Coloque-o em uma função com algumas modificações e ele lidará com qualquer número de grupos:
grmagic () {
getent group "$@" |
cut -d: -f 4 |
tr , '\n' |
sort |
uniq -dc |
grep "^[[:blank:]]*$#" |
awk '{all = all d $3; d = ", "} END {print all}'
}
Execute:
$ grmagic dell hp
zippy, george, bungle
$ grmagic dell hp rainbow
zippy, bungle
Uma função que consiste principalmente em um script AWK:
grmagic () {
getent group "$@" |
awk -F: -v "c=$#" '{
split($4, a, ",");
for (i in a) n[a[i]]++
}
END {
for (i in n)
if (n[i] == c) {
printf d i; d=", "
};
printf "\n" }'
}