我试图将下面的系统命令放到perl脚本中,但是 sed表达式包含引号和反引号,我不知道如何逃避所有这些,所以它将完全按照我的需要执行我的系统命令。
以下是命令的示例:
mysql -u root -D porta-billing -e "..." | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"
答案 0 :(得分:3)
您要问的问题的答案是使用qx(...)
运算符。 qx(...)
是“选择你自己的分隔符”版本的反引号。
my $output = qx[ ... ];
或者
my $output = qx( ... );
或者
my $output = qx! ... !;
很容易找到一个不会与命令字符串中的字符冲突的分隔符。
但是应该提出的问题的答案有两个部分:
mysql
- 请改用DBI。sed
- 使用Perl代码来操作您的文本。我对我答案的第一部分感到有点紧张,因为我担心你会采取我的hacky解决方法并最终导致无法维护的混乱。请注意下半部分的建议 - 即使你在这种情况下忽略它。