-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