É um problema de citação. Você está usando aspas duplas para a variável $f
, mas as aspas duplas também têm outras implicações. Em particular, eles permitem o escape de caracteres em barra invertida, portanto, \
se torna \
quando atinge Perl:
$ printf "%s\n" "print if s/(\label\{.*?)\}/_$f\}/g"
print if s/(\label\{.*?)\}/_\}/g
Isso cria um problema com r
, porque \r
será visto como o caractere de retorno (consulte perlrebackslash
) - não corresponderá a r
. Use aspas simples, abrindo apenas para a variável:
$ printf "%s\n" 'print if s/(\label\{.*?)\}/_'"$f"'\}/g'
print if s/(\label\{.*?)\}/_\}/g