Linux sed : Remplacement d’occurrences

Sous Linux il existe certains outils très puissants permettant la manipulation des chaînes de caractères avec des expressions régulières, tels que sed, awk ou encore cut.

J’ai eu il y a peu à plonger dans la manipulation d’une chaîne que je récupérais d’une commande ls dans un script, afin d’y remplacer des occurrences. Donc, voici mon exemple de code, qui fait les actions suivantes :

  • on remplace « .log » par « .log -a « 
  • au début de la chaîne, on ajoute « -a « 
RES=$(ls /home/dir/*.log)
FINAL=$(echo $RES | sed 's/.log /.log -a /g') 
FINAL=$(echo $FINAL | sed 's/^\(.\{0\}\)/-a /')

echo $CORPSE | mail -s "$SUBJECT" $FINAL "$EMAIL3"

Explications :

Note : Dans sed, les « / » sont des séparateurs d’arguments derrière la commande sed

Donc, ici je récupère dans $RES le retour de la commande de ls, qui me répertorie mes fichiers .log dans mon dossier « dir », $(…) servant à retourner le retour des fonctions exécutées à l’intérieur.

Cette chaîne pouvant être constituée d’un log, comme de 20, se présente sous une forme « /home/dir/test.log home/dir/test2.log » et à la 2ème ligne, je vais donc rediriger $RES dans sed, avec les options ‘s/.log /.log -a /g’ .

  • Le « s » signifie que je remplace les occurrences
  • « .log  » est l’occurrence à remplacer
  • « .log -a  » est la chaîne qui remplace
  • Le « g » signifie toutes les occurrences

Enfin, on écrit le resultat de la commande dans $FINAL.

J’aurais ensuite pu me faciliter la vie et mettre « -a  » en dur devant ma variable générée, mais je l’ai fait également via sed, à la 3ème ligne.

Dans cette ligne :

  • le « s » signifie que je remplace
  • ce fatras incompréhensible « ^\(.\{0\}\) », signifie que je veux remplacer dès l’index 0 (au début de ma chaîne), les anti-slashs « \ » permettent de casser les caractères qui suivent, de façon à ce qu’ils soient interpretés comme du texte pur, et pas comme des caractères spéciaux, les crochets définissent que l’on parle de l’index d’un caractère ou commencer dans la chaîne, et le point, défini si on veut commencer à remplacer avant ou après l’index.
  • Pour finir « -a  » est l’expression que nous souhaitons mettre en remplacement.

Grâce à cela, j’ai pu envoyer en pièce jointe, en un seul mail, tout les fichiers .logs dispos.

Laisser un commentaire