0

我将 bash shell 与 Perl v 5.18.2 一起使用。我正在运行此语句

perl -pi -e "s/([^,]+),([^,]+),([^,]+),(.*[^\n]+)\n/select '\$1', u.id, u.first_Name, u.last_name, u.url FROM user u, user_role ur where u.id = ur.user_id and lower(ur.role_id) = '\$2' and lower(u.first_name) = lower('\$3') and lower(u.last_name) = lower('\$4');/g" /tmp/users.csv 

但是我想做的是在“$3”和“$4”参数被放入这个 perl 语句的替换部分之前,我想转义任何可能出现在其中的单引号,以便 SQL 语句正常运行(这个将在 MySQL 5.5.18 上运行)。如何调整上述内容,以便当 perl 替换 $3 和 $4 参数时,它会用转义的 MySQL 单引号替换单引号?

4

1 回答 1

-1
perl -pi -e "sub R{(\$a=shift)=~s/'/''/g;\$a;} s/([^,]+),([^,]+),([^,]+),(.*[^\n]+)\n/select '\$1', u.id, u.first_Name, u.last_name, u.url FROM user u, user_role ur where u.id = ur.user_id and lower(ur.role_id) = '\$2' and lower(u.first_name) = lower('@{[R(\$3)]}') and lower(u.last_name) = lower('@{[R(\$4)]}');/g;" /tmp/users.csv

Perl 转置任何字符串(包括正则表达式)。并执行包含在@{[ code ]}.

创建用于转义 MySQL 字符串的函数 ( R()) 并将其从替换字符串中调用为@{[ R($3) ]}.

于 2016-08-29T17:24:51.283 回答