转义Perl中的字符

时间:2012-10-08 09:41:52

标签: perl escaping

一个愚蠢的问题。

我正在尝试使用"$option">$option_translated搜索并替换$option>$option_translated

当我在unix终端中执行此命令时,它工作正常。

sed -i 's/"$option">$option_translated/$option>$option_translated/g' filename.txt

但是当我在我的Perl脚本中使用它时它不起作用

my $cmd = ("sed -i 's/"$option">$option_translated/$option>$option_translated/g' $filename");
qx{$cmd};

我认为有些角色需要在这里转义。让我知道那些是什么。感谢。

2 个答案:

答案 0 :(得分:1)

您需要转义引号:

my $cmd = ("sed -i 's/\"$option\">$option_translated/$option>$option_translated/g' $filename");
                here__^      __^

或使用其他引号运算符代替",例如:

my $cmd = qq(sed -i 's/"$option">$option_translated/$option>$option_translated/g' $filename);

答案 1 :(得分:1)

你不需要从Perl调用sed,使用Perl的正则表达式功能,只需使用\Q \E或仅使用它来逃避它(根据我的理解,你正在尝试删除"):

my $str = '"$option">$option_translated';

$str =~ s/"//g;
print $str;