A resposta mais simples é usar uma sequência de grep
chamadas: -
grep 'A1' filename | grep 'A2' | grep 'A3'
Para lidar com um número independente de parâmetros, você precisará construir uma string de execução: -
str="cat filename"
while [ $# -gt 0 ]; do a="$a|grep '$1'"; shift; done
eval "$a"
Embora eu geralmente evite chamadas cat
desnecessárias (desculpe pelo trocadilho), seu uso neste exemplo simplifica muito o script. Eu não testei todas as combinações com espaços incorporados nos parâmetros, mas o script acima parece lidar com as citações corretamente em casos simples.