带变量的perl正则表达式

时间:2015-03-17 14:23:16

标签: regex perl

set release=//packages/thirdparty/release/main.txt

perl -pe"s!(//packages/thirdparty/release/main.txt *)#\d+!$1#15!;" testlog.txt

如何使用%release%(环境变量release)代替//packages/thirdparty/release/main.txt

我从

收到语法错误
 perl -pe"s!(%release%! *)#\d+!$1#15!;" testlog.txt

原始问题 Search and replace a string using Windows shell or Perl script

1 个答案:

答案 0 :(得分:2)

您可以使用%ENV哈希来访问环境变量,例如

perl -pe"s/(\Q$ENV{RELEASE}\E *)#\d+/$1#15/" testlog.txt

您还可以使用正面的后视来避免必须替换初始字符串

perl -pe"s/(?<=\Q$ENV{RELEASE}\E *)#\d+/#15/" testlog.txt

\K如果您运行的是Perl 5的14或更高版本

perl -pe"s/\Q$ENV{RELEASE}\E *\K#\d+/#15/" testlog.txt