Windows中的Perl单行错误

时间:2014-06-18 09:09:15

标签: regex windows perl command-line

我有一个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.`

之前的任何地方找不到字符串终止符“'”

为什么表现不同?

2 个答案:

答案 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}; }}"