val='100 0x20 105' awk -F= -v vals="$val" 'BEGIN { n = split(vals, w, /[ \t]+/) for (i=1; i<=n; i++) values[w[i]] = 1 } /^\[group[0-9]+]$/ { if (n == found) print grp delete seen found = 0 grp = $0 gsub(/^\[group|\]$/, "", grp) } NF == 2 && values[$2] && !seen[$2]++ { found++ } END { if (n == found) print grp }'