Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Perl oneliner在Windows中损坏文件(回车相关问题)_Regex_Windows_Perl_Carriage Return - Fatal编程技术网

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

Regex Perl oneliner在Windows中损坏文件(回车相关问题),regex,windows,perl,carriage-return,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 -i

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

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

在windows中,线端与\r\n在unix中不同 所以


windows中的may works

与unix中的\r\n不一样 所以


may works

从图案中删除断线并更换:

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
或者捕获并替换使用它:

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:.+$/%%Title: your def/" file.ps
perl -p -ifoo.bak -e "s/%%Title:.+(\R)/%%Title: your def$1/" 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
):


为什么需要触摸
\n
s/%%Title:\K(+)/your def/
不好吗?@zdim,因为通常我不知道文件中的初始标题,我想更改它。(考虑对许多不同标题的文件执行此任务)哦,对了---我的意思是你不能省略换行符,
s/%%Title:old/%%Title:new/
?@zdim,当然最好不要使用回车符,是的,也就是只替换文本。你为什么需要触摸
\n
s/%%Title:\K(+)/your def/
不好吗?@zdim,因为通常我不知道文件中的初始标题,我想更改它。(考虑对许多不同标题的文件执行此任务)哦,对了——我的意思是你不能省略换行符,
s/%%Title:old/%%Title:new/
?@zdim,当然最好不要使用回车符,是的,也就是说,只替换文本。我试过了,但没用。它破坏了文件。但我稍后会再检查并回信。问题不在于替换,而在于perlio使用的默认层。我试过了,但没有成功。它破坏了文件。但我稍后会再检查并回信。问题不在于替换,而在于perlio使用的默认层。不幸的是,它损坏了文件(两个版本)。如果你愿意,我可能会提供文件。我不确定它是否相关:该文件是在MacOs.Nope中创建的。问题不在于替换,而在于perlio使用的默认层。@tjd您能解释一下吗?不幸的是,它破坏了文件(两个版本)。如果你愿意,我可能会提供文件。我不确定它是否相关:该文件是在MacOs.Nope中创建的。问题不在于替换,而在于perlio使用的默认层。@tjd您能解释一下吗?