我有一个Perl one-liner,它会读取一个文件,然后移除每行的第一个字段,用逗号分隔并转储其余部分。
perl -wan -e 'for (@F) { if (/(aaa),(.*)/) {$text = $2; $text =~ s/$1// ; print "$text\n";}}'
其中aaa位于每行的第一个字段中。这在Linux中工作正常,但在Windows中它会引发错误:
在EOF -e line 1.`
之前的任何地方找不到字符串终止符“'”
为什么表现不同?
答案 0 :(得分:2)
在MS Windows中,单引号不像在Linux中那样起作用。你必须切换到双引号。
perl -wan -e "for (@F) { if (/(aaa),(.*)/) {$text = $2; $text =~ s/$1// ; print qq($text\n);}}"
我使用qq
作为嵌套双引号。
答案 1 :(得分:2)
您可能希望使用双引号而不是单引号。这可能会对引用的文字"$text\n"
造成问题,可以用perl替代引用qq{$text\n}
替换
perl -wane "for (@F) { if (/(aaa),(.*)/) {$text = $2; $text =~ s/$1//; print qq{$text\n}; }}"