3 votes

Erreur d'expression régulière précédente invalide donnée par sed

Je fais partie d'une équipe tournante qui gère de nombreux sites web, et nous avons hérité d'un code particulièrement mauvais pour un site web que nous sommes en train de refondre complètement. De manière assez horrible, il y a des liens sur le serveur de développement qui vous mènent au serveur live et à d'anciens domaines et à beaucoup d'autres choses terribles.

J'ai essayé d'écrire une commande grep/sed pour remplacer tous ces liens par la fonction php full_link définie par l'utilisateur que nous utilisons sur tous nos sites Web afin d'empêcher tous les liens vers différents endroits. Donc (en utilisant un caractère générique pour notre domaine) au lieu d'écrire http://www.place.com/foo/bar vous écrivez <?php echo full_link('foo/bar'); ?> et il fonctionnera quand nous le déplacerons d'un serveur à un autre.

Voilà ce que j'ai obtenu :

grep -v 'echo' * -r -P | grep "(?<=<a href=['\"])(http:\/\/foo\.bar\.net\/|10\.41\.6\.118\/|http:\/\/foo2\.bar\.net\/)([^<]*?)(?=['\"])" -P | sed -r "s@(?<=<a href=['\"])(http://foo\.bar\.net/|10\.41\.6\.118/|http://foo2\.bar\.net/)([^<]*?)(?=['\"])@<?php echo full_link('\2'); ?>@gpw output"

(Si vous vous interrogez sur le premier grep ou sur le [^<] il s'agit dans les deux cas d'une tentative de base pour éviter de mettre des balises php à l'intérieur de balises php existantes. Puisque c'est juste un premier passage pour rendre l'édition manuelle moins pleine de copier-coller de liens et de se faire rediriger vers le mauvais serveur, il n'a pas besoin d'être parfait, mais je suis ouvert à de meilleures façons de le faire).

Les instructions grep fonctionnent et récupèrent ce que je veux, mais lorsque j'ajoute sed à la fin, voici ce qui se passe :

sed: -e expression #1, char 159: Invalid preceding regular expression

D'après les recherches que j'ai effectuées, il semble que j'ai probablement mal échappé à quelque chose dans mon instruction sed, et j'ai essayé un certain nombre de choses, mais je reçois toujours le même message indiquant l'un des derniers caractères de l'expression.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X