Perl one-liner用于从文件中删除尾随空格

时间:2012-10-03 11:32:11

标签: perl

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

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

在主perl脚本中:

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

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

哪里出错了?

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:5)

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

更清晰的语法可能是:

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

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

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

答案 2 :(得分:0)

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

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

$ echo -e 'hi    \nbye'| perl -pe 's{[\t\040]+$}{};' | cat -A
hi$
bye$