-2
我想把下面的系统命令放到perl脚本中,但是 sed表达式同时包含引号和反引号,我不知道如何将它们全部转义,所以它会执行我的系统命令完全按照我的需要。在Perl脚本中的sed系统命令
下面是命令的例子:
mysql -u root -D porta-billing -e "..." | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"
我想把下面的系统命令放到perl脚本中,但是 sed表达式同时包含引号和反引号,我不知道如何将它们全部转义,所以它会执行我的系统命令完全按照我的需要。在Perl脚本中的sed系统命令
下面是命令的例子:
mysql -u root -D porta-billing -e "..." | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"
这个问题的答案你问的问题是使用qx(...)
操作。 qx(...)
是反引号的“选择你自己的分隔符”版本。
my $output = qx[ ... ];
或者
my $output = qx(...);
或者
my $output = qx! ... !;
很容易发现,也不会在你的命令字符串中的字符发生冲突的分隔符。
但这个问题的答案,你应该被问的问题有两个部分:
mysql
- 使用DBI代替。sed
- 使用Perl代码来操纵文本。我对我的答案的第一部分感到有些紧张,因为我担心你只会采取我的哈克解决方法,并最终导致无法维护的混乱。请注意下半年的建议 - 即使您在这种情况下忽略它。
不要这样做!使用[DBI](https://metacpan.org/pod/DBI)。 – ThisSuitIsBlackNot
我想把一个shell命令放到脚本中。不多。我不想学习一个新的处理程序 – Vadym
通过'system'调用MySQL客户端和sed比使用DBI和本机Perl命令更容易出错,而且DBI并不是很难学。文档的[“大纲用法”](https://metacpan.org/pod/DBI#Outline-Usage)部分是一个很好的起点。 – ThisSuitIsBlackNot