Une fois de plus, il me semble que les spécifications ne sont pas suffisamment précises.
Et l'exemple fourni est trop spécifique!
Je voudrais vérifier si j'ai bien compris ce que tu veux faire:
Tu as une liste de fichiers.
Chaque fichier peut contenir une ou plusieurs lignes.
Chaque ligne peut contenir ou non le motA.
Chaque ligne peut contenir ou non le motB.
Tu veux trouver, parmi tous les fichiers,
le nom de ceux dont au moins une ligne contient le motA mais dont aucune ligne ne contient le motB.
C'est-à-dire aussi trouver
le nom de tous les fichiers dont au moins une ligne contient le motA, mais en éliminant tous ceux dont au moins une ligne contient le motB.
Est-ce bien ça?
Si oui,
grep -l -v motB ne va pas, car ça n'élimine pas un fichier dont au moins une ligne contient le motB; ça élimine un fichier dont toutes les lignes contiennent le motB.
Évidemment, avec des exemples de fichiers à une seule ligne, il est très difficile de faire la différence entre "au moins une ligne" et "toutes les lignes"!!!
Si "mes" spécs sont bonnes, je repartirais bien de la solution de al1_24 (en remplaçant -q par ce qu'elle veut dire):
for fic in $(grep -l motA *) ; do grep motB ${fic} > /dev/null || echo ${fic} ; done
Et peux-tu nous dire quel est cet environnement bizarre où grep n'admet pas -q ???
Partager