草庐IT

regex - Perl one liner corrupts file in Windows (carriage-return related issue)

coder 2024-06-15 原文

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

%%Title: my abc

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

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

关于regex - Perl one liner corrupts file in Windows (carriage-return related issue),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40757372/

有关regex - Perl one liner corrupts file in Windows (carriage-return related issue)的更多相关文章

随机推荐