我在文件中有以下文字:
prompt **********************************************************************************
prompt ** Start
prompt **********************************************************************************
prompt **
prompt ** Calling: FILE
prompt **
prompt **
@@FOLDER\FILE
prompt **
prompt ** commit
commit;
prompt **
prompt **
prompt **
prompt **********************************************************************************
prompt ** End
prompt **********************************************************************************
当我这样做时
$ perl -pi -e "s/FILE/$file/g" ./tmp.sql;
它用$ file中的任何内容替换了FILE一词的所有实例,但是当我调用
时$ perl -pi -e "s/FOLDER/$folder/g" ./tmp.sql;
哪个只有文件夹字符串,它咳嗽起来,不会替换任何东西,我调用它的shell会吐出这些东西:
Execution of -e aborted due to compilation errors.
Unquoted string "g" may clash with future reserved word at -e line 1.
Unknown regexp modifier "/R" at -e line 1, at end of line
Unknown regexp modifier "/F" at -e line 1, at end of line
Unknown regexp modifier "/5" at -e line 1, at end of line
Unknown regexp modifier "/4" at -e line 1, at end of line
Unknown regexp modifier "/7" at -e line 1, at end of line
Unknown regexp modifier "/5" at -e line 1, at end of line
Unknown regexp modifier "/6" at -e line 1, at end of line
Unknown regexp modifier "/_" at -e line 1, at end of line
Unknown regexp modifier "/2" at -e line 1, at end of line
任何人都知道是什么给出了什么?
答案 0 :(得分:3)
message.AppendLine("<img src='www.somesitename.com/storage/logo.ong' />");
变量中嵌入的斜杠过早地终止了替换
最简单的解决方案是更改分隔符。这样的事情应该有效
folder
答案 1 :(得分:3)
假设您有folder=/some/path
。下面是shell处理完行后对Perl的调用:
perl -pi -e "s/FOLDER//some/path/g" ./tmp.sql
shell变量的值不会传递给Perl; shell在Perl看到它之前对字符串执行简单的文本扩展。
如果您在字面上进行替换,您会发现需要输入类似
的内容perl -pi -e "s/FOLDER/\/some\/path/g" ./tmp.sql
或
perl -pi -e "s|FOLDER|/some/path|g" ./tmp.sql
很难正确地逃避$folder
中的值或者#34;猜测&#34;一个安全的分隔符。最安全的做法是将$folder
作为额外参数传递。
perl -pi -e 'BEGIN {$replacement=shift}; s/FOLDER/$replacement/g' "$folder" ./tmp.sql
答案 2 :(得分:2)
在shell环境中以[{1}}的形式从Perl中访问变量$folder
。
$ENV{folder}
请注意,现在使用“单引号”来分隔要执行的代码。