![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
Aizen64
Rah, ma regex passe toujours pas, ai je loupé quelque chose d'évident ?
Visiblement mon précédent message et notamment la phrase:"Il est important de faire un description assez large pour éviter par la suite de remplacer n'importe quoi n'importe où."
1 2 3 4 5 6
| #!/usr/bin/env bash
TEMPLATES_DIRECTORY=../templates
REGEX=[0-9+]?\.[0-9]+
NEW_VERSION="$(cat ../templates/shared/version.twig | grep -E ^$REGEX)"
find $TEMPLATES_DIRECTORY -type f -iname '*.twig' -exec sed -i {} -e "s/\-[0-9]+?\.[0-9]\.js/-$NEW_VERSION.js/g" \; |
On ne pipe pas cat avec grep qui prend naturellement un nom de fichier en paramètre:
grep [OPTIONS] PATTERN [FILE...]
À propos de sed (et de grep d'ailleurs): par défaut sa syntaxe regex est BRE (Basic Regular Expression), syntaxe dans laquelle le quantificateur + n'existe pas et encore moins la notion de quantificateur non-gourmand (donc exit les +?, *?, et ??). Avec le switch -E, on peut changer cette syntaxe pour l'ERE (Extended Regular Expression) qui est un peu plus évoluée mais où les quantificateurs non-gourmands n'existe toujours pas.
Le caractère - n'est pas un caractère spécial, inutile de l'échapper.
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
Comme pour grep le nom du ou des fichiers cible sont à la fin et pas après le switch -i qui lui éventuellement attend une extension pour le renommage des fichiers originaux (voir post précédent). Donc:
find blahblahblah -exec sed -i.bak scriptsed {} \;
find n'est utile que si il est nécessaire d'explorer des sous-répertoires, si tous tes fichiers sont dans le même répertoire, sed est capable de traiter plusieurs fichiers à la suite: donc un simple glob suffit:
sed SCRIPT ../templates/*.twig
Partager