替换时在perl中引用字符串

替换时在perl中引用字符串,perl,Perl,我必须在perl中使用替换方法。 但问题是要替换的字符串相当复杂,并且包含特殊字符 要搜索的字符串: K6D2wlawNtxOMrTOiEwnz12Y1qvn 要替换的字符串: TO_DATE('03/31/2013 02:00:00', 'MM/DD/YYYY HH24:MI:SS') 虽然要搜索的字符串相当简单,但要替换的字符串相当复杂,常规替换无法工作: perl -p -i -e "s/$search/$replace/g" file 在perl中是否还有其他引用方法可以超越这些正

我必须在perl中使用替换方法。 但问题是要替换的字符串相当复杂,并且包含特殊字符

要搜索的字符串:

K6D2wlawNtxOMrTOiEwnz12Y1qvn
要替换的字符串:

TO_DATE('03/31/2013 02:00:00', 'MM/DD/YYYY HH24:MI:SS')
虽然要搜索的字符串相当简单,但要替换的字符串相当复杂,常规替换无法工作:

perl -p -i -e "s/$search/$replace/g" file
在perl中是否还有其他引用方法可以超越这些正则表达式规则并简单地替换上面的复杂字符串


我必须强调,我不能编辑要替换的字符串,因为它来自其他来源,可能是SQL中的各种其他函数,因此不在我的控制范围内。

使用另一个替换分隔符,即
s |
vs
s/

perl -p -i -e "s|K6D2wlawNtxOMrTOiEwnz12Y1qvn|TO_DATE('03/31/2013 02:00:00', 'MM/DD/YYYY HH24:MI:SS')|" file

如果要将其视为普通字符串,则应调用quotemeta以转义任何特殊字符,或使用等效序列,即

perl -p -i -e "s/\Q$search\E/\Q$replace\E/g" file

它在search=ruby和replace=python(当引用不重要时)下运行良好。但当search=r/u$b/y,replace=p/y/t$h/o/n时,它没有这样做。为什么它不起作用?我运行了以下命令:echo$search | perl-pe“s/\Q$search\E/\Q$replace\E/g”,并得到了这样的结果:在-E行1中,模式和下面的单词之间没有空格是不推荐的。-e第1行“s/\Qr/u$b/y\e/\Qp/y/t$h/o/n”附近的语法错误\Q不会影响模式和替换之间的/;最容易避免在其中使用分隔符,因为perl允许使用任意字符。i、 e.s:\Qr/u$b/y\e:\Qp/y/t$h/o/n:或s/{Qr/u$b/y\e}{\Qp/y/t$h/o/n}他不知道字符串是什么,所以他无法确定自己选择的分隔符是否在那里。这是不可接受的,他必须引用字符串。