我在 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