我在Perl脚本中调用perl one-liner。
单行的意图是从文件中删除尾随空格。
在主perl脚本中:
`perl -pi -e 's/\s+$//' tape.txt`;
现在它给我一个错误Substitution replacement not terminated at -e line 2.
哪里出错了?
答案 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$