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 № 1Avec /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"