在 perl 脚本中返回错误结果

在 perl 脚本中返回错误结果

我在 linux shell 上运行这个命令,它运行顺利

sed -i 's/\[-.*-]//g' error .txt

它的作用是删除 [-any text-] 等模式以及方括号和 - 符号。

但是当我尝试通过 perl script 运行它时,它仅删除“-”符号。

我尝试使用 system("sed -i 's/\[-.*-]//g' error.txt");

请问我做错了什么?

答案1

由于在 perl 中对字符串使用双引号,因此\字符串中的 会被 perl 解释。

使用双反斜杠,即system("sed -i 's/\\[-.*-]//g' error.txt");

或者使用[[]代替\[,即system("sed -i 's/[[]-.*-]//g' error.txt");
这个变体也可以在 shell 中工作。

答案2

perl 中双引号字符串内的反斜杠由 perl 解释,因此正在运行的命令是

 sed -i 's/[-.*-]//g' error.txt

这将删除减号、点和星号字符。事实上,您第二次列出 minus 并不担心 sed。

perl 有许多引用工具,特别是可以使用q运算符 so

 system(q(sed -i 's/\[-.*-]//g' error.txt));

会工作。看man perlop

相关内容