Mots-clé : expressions regulières

vim : expressions régulières rechercher remplacer (mémo)

Ci-suit une série d’expressions régulières qui fonctionnent sous vim, et dont j’ai fait la traduction en langue Française, afin que vous puissiez comprendre les subtilités :

  • /^ \+$ : rechercher toutes les lignes qui commencent et finissent par une suite de minimum un ou plus d’espaces (un antislash avant le « + »)
  • /^ *$ : rechercher toutes les lignes qui commencent et finissent par une suite de minimum zéro ou plus d’espaces (pas d’antislash avant le « * »)
  • /^ \*$ : rechercher toutes les lignes qui commencent par un espace et finissent par le caractère « * » (un antislash avant le « * »)
  • /^ \{1,1\}$ : rechercher toutes les lignes qui contiennent un et un seul espace (ne pas oublier l’antislash avant les « {} »)

Et maintenant une expression complexe qui m’a été très utile :
Si vous tapez exactement cela :

:%s/\($this->[a-z]\+\)\(_\)\(.\)/\1\u\3/g

Vous aurez tous les ordres du type :

$this->Sejour_deb

Qui seront transformés en :

$this->SejourDeb

Très très utile.
Explication :

:%s/\($this->[a-z]\+\)\(_\)\(.\)/\1\u\3/g
: = exécuter un ordre ;
% = appliquer sur la totalité du document ;
s = appliquer sur la chaine (ici ligne par ligne) ;
\($this->[a-z]\+\) = groupe qui a $this-> puis une série de lettres ;
\(_\) = groupe qui a un tiret bas ;
\(.\) = groupe qui contient un caractère quel qu’il soit ;
On voit qu’il y a trois groupes, ils sont accessibles via antislash puis le numéro du groupe, exemple : »\1« , et le cas concret :
/ = remplacer par… ;

  • \1 le groupe numéro 1 ;
  • \u mettre en majuscule ;
  • \3 le groupe numéro 3 ;

/g faire toutes les occurrences trouvées.

Linux Shell : exemple de grep et expressions régulières

Ci-suivent des exemples de grep qui fonctionnent.
Je veux très souvent lister tous les fichiers php / htm / Javascript. J’ai deux possibilités :

  • find . | grep -E '(php|htm|html|js)$' | more
  • find . | grep '\(php\|htm\|html\|js\)$' | more

Je veux aussi souvent chercher parmi tous mes fichiers de mon site Internet, lesquels contiennent un mot particulier. Prenons par exemple le mot « Internet ». J’ai deux possibilités :

  • find . | grep -E '(php|htm|html|js)$' | xargs grep Internet
  • find . | grep '\(php\|htm\|html\|js\)$' | xargs grep Internet

Je le note parce que je ne comprenais pas pourquoi ce qui suit ne fonctionnait pas :
find . | grep '(php|htm|html|js)$' | xargs grep Internet

C’est tout simplement que par défaut (je ne sais pas si c’est le fait de mettre des quotes (« '« )) qui y fait, mais grep considère que ce qui est passé ainsi doit être cherché littéralement, et donc il ne ressortira que les fichiers dont le nom contient ces caractères : « (php|htm|html|js)« … ce qui n’est pas le but recherché. Mes exemples précédents, eux, fonctionnent correctement.

En espérant que cela serve à quelqu’un un jour !