Script grep BASH

Bonjour,
je dois concevoir un script pour mon entreprise qui check des fichier PHP pour vérifier que le code est bien au norme.
Dans un premier temps je dois l’expression suivante dans le script PHP des DEV: $valeur1$valeur2_.DNS
Le but de jeu est de vérifier que le . est bien présent devant DNS.
Comment faire pour faire un grep de toute les expressions DNS_ qui ne possède pas le . devant??
Je ne sais pas si j’ai été assez clair!!
Merci d’avance pour vos réponses. :slightly_smiling:

Bonjour,

Tu as une solution assez simple et élégante (enfin je trouve) :

On cherche les occurences du motif DNS_ qui sont précédées par zéro occurences du motif .

Bonne journée

Merci!!!

Tu peux aussi utiliser [^motif] pour exclure un motif :

devrait donner le même résultat

(j’ai échappé le point au passage, sinon ça représente n’importe quel caractère)

Pas vraiment en fait le “point” n’a pas de caractère spécial lorsqu’il est dans les crochets. Il signifie juste le caractère “point” normal.

Sinon cette expression régulière laisse passer plein de motifs non-conformes :

$ cat test.txt DNS_ a.DNS_ b_DNS_ $ cat test.txt | grep '[^_._]DNS_' $

Car ce qu’il y a entre crochets avec un accent circonflexe permet de dire “je veux un caractère qui ne soit ni un underscore, ni un point”.

Pour faire quelque chose du même style un peu plus correct, il faudrait faire :

grep '[^_][^.][^_]DNS_'

Et encore, aucune des lignes du fichier “test.txt” n’est détectée (car il y a moins de trois caractères entre le début de la ligne et le motif DNS_). Pour avoir un résultat totalement correct, il faut faire :

grep -E '([^_][^.][^_]|^.{0,2})DNS_'

afin de gérer les cas ou le motif DNS_ est précédé de moins de trois caractères avant le début de la ligne.

(J’avais déjà essayé tout ça avant de trouver la solution “élégante” que j’ai donné plus haut :mrgreen: )