我正在使用命令行中的一行代码来执行REGEX替换。这项工作:
perl -pe 's/<span class="num">(dd?)/<span class="num">+$1 + 1/eg' calendar1.html > output.html
但当我在开头添加<td>
时,我会得到错误:
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
错误:
Can't modify numeric lt (<) in scalar assignment at -e line 1, near "1}"
我试图匹配的html结构如下:
<td>
<h3 class="day"><span class="num">10
我正在尝试1到每个一到两位数的
对于/e
,替换必须是Perl表达式。
我的Perl(5.20.1)抱怨<span class="num">$1 + 1
,我认为这是对的:这不是一个表达式。在需要的地方添加引号和串联:
s/<span class="num">+(d)/q(<span class="num">) . ($1 + 1)/eg
类似地,对于第二个表达式:
s/<td><h3 class="day"><span class="num">(dd?)/q(<td><h3 class="day"><span class="num">) . ($1 + 1)/eg
或更短的
s/(<td><h3 class="day"><span class="num">)(dd?)/$1 . ($2 + 1)/eg
choroba击败我得到了答案:/e接受一个表达式;试试这样的东西:
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'