Trouver des fichiers contenant une chaîne

BUT : trouver les fichiers contenant une chaîne alphanumérique

Méthode avec « find »
find . | xargs grep {chaine} -sl

Méthode avec « grep »
grep -rli {chaine} .

Exemples :

Nous avons créer deux fichiers clients pour faire notre test

Un fichier clients-2020.txt qui contient :

Goland 09/06/20 \ Prospect
Salist 10/08/20 \ Prospect \ Client
Trucks 20/12/20 \ Prospect

Et un fichier clients-2021.txt qui contient :

Hermat 20/02/21 \ Prospect
Appres 12/12/21 \ Prospect \ Client

Recherchons les fichiers contenant la chaîne ‘Salist’

bzg@uc:~/Documents$ find . | xargs grep Salist -sl
./clients-2020.txt
bzg@uc:~/Documents$ grep -rli Salist .
./clients-2020.txt
bzg@uc:~/Documents$ grep -rli 'Salist' .
./clients-2020.txt
bzg@uc:~/Documents$ grep -rli "Salist" .
./clients-2020.txt

La chaîne ‘Salist’ étant simple et sans caractère système, nous pouvons écrire cette chaîne sans délimiteur ou avec les apostrophes simples ou doubles, il n’y aura aucune différence

Recherchons les clients  ou prospects de ‘2020’

bzg@uc:~/Documents$ find . | xargs grep "20" -sl
./clients-2021.txt
./clients-2020.txt

Nous constatons que les fichiers 2020 et 2021 sont retournées, en effet la recherche sur « 20 » renvoi aussi le fichier contenant ’20/02/21′ puis 20 s’y trouve
Nous devons donc faire une recherche sur ‘/20’

bzg@uc:~/Documents$ find . | xargs grep "/20" -sl
./clients-2020.txt

Recherchons les fichiers contenants des clients donc avec la chaîne ‘\ Client’, il faut impérativement délimiter la chaîne à cause de l’espace et échapper le caractère système ‘\’ en le faisant précéder d’un autre caractère ‘\’ soit la chaîne ‘\\ Client’

bzg@uc:~/Documents$ find . | xargs grep '\\ Client' -sl
./clients-2021.txt
./clients-2020.txt

En résumé : on peut rechercher les fichiers contenant une chaîne en utilisant ‘find’ et / ou ‘grep’