4

我在 Perl 脚本中调用 perl one-liner。

单行的目的是从文件中删除尾随空格。

在主 perl 脚本中:

`perl -pi -e 's/\s+$//' tape.txt`;

现在它给我一个错误Substitution replacement not terminated at -e line 2.

它哪里出错了?

4

3 回答 3

7

这是因为$/您的主 perl 脚本中的(特殊变量)。请注意,变量``像在字符串内部一样被插入到字符串内部"",并且其中有一些单引号的事实并没有改变这一点。你需要逃避$

`perl -pi -e 's/\s+\$//' tape.txt;`
于 2012-10-03T11:35:26.673 回答
5

反引号语法调用一个 shell,当被调用时,shell 假定它应该插入传递的字符串。

更简洁的语法可能是:

system('perl -pli -e "s/\s*$//" tape.txt');

由于您没有捕获命令的输出,因此使用反引号或qx代替system不是问题。

同样,添加-l开关 autochomps 读取的每一行然后添加一个换行符 --- 可能是你想要的。

于 2012-10-03T13:08:04.800 回答
0

\s 匹配 [ \t\n\r\f] 并且不想匹配 \n。

注意使用 {} 作为 subst 分隔符:

$ echo -e 'hi    \nbye'| perl -pe 's{[\t\040]+$}{};' | cat -A
hi$
bye$
于 2017-09-05T20:33:32.587 回答