Naiv um bei deinem Beispiel zu bleiben eigentlich so:
grep A datei.txt | grep -v B | grep -v C > ergebnis.txt
Ergebnis enthält dann alle A, die nicht B und auch nicht C enthalten. Dann fehlen dir aber auch alle nicht-A Zeilen.
Mit regulären Ausdrücken kannst du A gefolgt von B oder C so ausdrücken:
grep -P 'A.*(B|C)' test.txt
Hier ist dann jedoch die Reihenfolge relevant, also '(B|C).*A'
wird davon nicht abgedeckt. Ebenso fehlen Worttrenner so daß womöglich auch Teilworte gematched werden.
Letztlich müsstest du dich da selbst in reguläre Ausdrücke (PCRE o.ä.) einarbeiten und eine Lösung für dich finden. Oder du zeigst ein belastbares Beispiel mit Eingabe u. gewünschter Ausgabe.