使用 lt 时正则表达式中的 PERL 'e' (eval) 错误 (<)



我正在使用命令行中的一行代码来执行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'

相关内容

最新更新