Perl oneliner在Windows中损坏文件(回车相关的问题)

我有一个PostScript文件,我想从其中更改一行:

%%标题:我的abc

%%标题:你的def

下面的Perl oneliner在Ubuntu中做了这个技巧:

perl -p -ifoo.bak -e "s/%%Title:.+\n/%%Title: your def\n/" file.ps 

但它腐败在Windows中的文件(看起来像它增加\ r \ n到每一个“行”或类似的东西)。

我尝试了另一种方法,但在Windows中仍然没有运气:

 perl -Mopen=OUT,:bytes -p -ifoo.bak -e "s/%%Title:.+\n/%%Title: your def\n/" file.ps 

发生了什么事情,我该如何解决这个问题? 谢谢。

从模式和替换中删除换行符:

 perl -p -ifoo.bak -e "s/%%Title:.+$/%%Title: your def/" file.ps 

或者捕获并使用它来替换:

 perl -p -ifoo.bak -e "s/%%Title:.+(\R)/%%Title: your def$1/" file.ps 

\R代表任何种类的换行符。

如果你想转换任何实际的换行符到unix linebreak(即。 \n ):

 perl -p -ifoo.bak -e "s/%%Title:.+\R/%%Title: your def\n/" file.ps 

在Windows的末尾是\ r \ n而不是\ n像在unix那样

 perl -p -ifoo.bak -e "s/%%Title:.+\r\n/%%Title: your def\r\n/" file.ps 

可能有用