/ / PERL 'e' (eval) dans l'erreur REGEX lors de l'utilisation de lt (<) - regex, perl

PERL 'e' (eval) dans l'erreur REGEX lors de l'utilisation de lt (<) - regex, perl

J'utilise une ligne depuis la ligne de commande pour effectuer une substitution REGEX. Cela marche:

perl -pe "s/<span class="num">(dd?)/<span class="num">+$1 + 1/eg" calendar1.html  > output.html

Mais quand j'ajoute <td> au début je reçois une erreur:

perl -pe "s/<td><h3 class="day"><span class="num">(dd?)/<td><h3 class="day"><span class="num"> +$1 + 1/eg" calendar1.html  > output.html

Erreur:

Can"t modify numeric lt (<) in scalar assignment at -e line 1, near "1}"

La structure html que je tente d’apparier ressemble à ceci:

<td>
<h3 class="day"><span class="num">10

J'essaie de 1 à chaque numéro à un ou deux chiffres

Réponses:

0 pour la réponse № 1

Avec /e, le remplacement doit être une expression Perl.

Mon Perl (5.20.1) se plaint <span class="num">$1 + 1, et je pense que c’est vrai: ce n’est pas une expression. Ajoutez des citations et une concaténation si nécessaire:

s/<span class="num">+(d)/q(<span class="num">) . ($1 + 1)/eg

De même, pour la deuxième expression:

s/<td><h3 class="day"><span class="num">(dd?)/q(<td><h3 class="day"><span class="num">) . ($1 + 1)/eg

ou plus court

s/(<td><h3 class="day"><span class="num">)(dd?)/$1 . ($2 + 1)/eg

0 pour la réponse № 2

choroba m'a répondu à la réponse: / e prend une expression; essayez quelque chose comme ça:

echo "<td> <h3 class="day"><span class="num">10" | perl -pe "s/<td>s*<h3s+class="day"><spans+class="num">(dd?)/"<td><h3 class="day"><span class="num">".($1+1)/ge"