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

时间:2016-11-23 06:19:49

标签: regex windows perl carriage-return

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

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

2 个答案:

答案 0 :(得分:0)

从图案和替换中删除换行符:

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换行符(即\n):

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

答案 1 :(得分:-1)

在Windows的行尾是\ r \ n而不是\ n就像在unix中一样 所以

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

可能有效