perl脚本中的sed系统命令

时间:2016-11-02 15:09:09

标签: perl shell sed

我试图将下面的系统命令放到perl脚本中,但是 sed表达式包含引号和反引号,我不知道如何逃避所有这些,所以它将完全按照我的需要执行我的系统命令。

以下是命令的示例:

mysql -u root -D porta-billing -e "..." | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"

1 个答案:

答案 0 :(得分:3)

您要问的问题的答案是使用qx(...)运算符。 qx(...)是“选择你自己的分隔符”版本的反引号。

my $output = qx[ ... ];

或者

my $output = qx( ... );

或者

my $output = qx! ... !;

很容易找到一个不会与命令字符串中的字符冲突的分隔符。

但是应该提出的问题的答案有两个部分:

  • 请勿从您的Perl程序中调用mysql - 请改用DBI
  • 不要从您的Perl程序中调用sed - 使用Perl代码来操作您的文本。

我对我答案的第一部分感到有点紧张,因为我担心你会采取我的hacky解决方法并最终导致无法维护的混乱。请注意下半部分的建议 - 即使你在这种情况下忽略它。