如何在 Windows 上使用 Perl 通过 Unix-EOL 就地编辑文件?
我正在尝试使用 Perl 的就地编辑功能在 Windows 上的 PowerShell 会话中更改具有 Unix 行结尾的文件中的某些文本:
perl.exe -i'.bak' -p -e "s#PATTERN#REPLACEMENT#g" (get-childItem *.sql,*/*.sql)
不幸的是,行结尾已从 Unix 更改为 Windows。
是否有一个选项可以调整这个衬线,使其不会修改行结尾?
I am trying to use Perl's in-place-editing feature to change some text in files with Unix line endings in a PowerShell session on Windows:
perl.exe -i'.bak' -p -e "s#PATTERN#REPLACEMENT#g" (get-childItem *.sql,*/*.sql)
Unfortunately, the line endings are changed from Unix to Windows.
Is there an option to tweak this one liner so that it doesn't modify the line endings?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通常,在 Windows 上,使用
:crlf
PerlIO 层默认情况下,它在文件中的 CRLF 行结尾与perl
看到的字符串中的 LF 之间进行转换。传统上,:raw
PerlIO 层将用于防止这种情况,但根据 文档:您可以使用
open
pragma 更改打开文件的默认层(和/或使用open
的三个参数版本来基于每个文件自定义它们)。在我的测试中(使用 Strawberry Perl 5.32),尽管有上述情况,使用
:perlio
和该编译指示仍然会进行行结束转换,所以:raw
就是这样。 (但是,perlio
与PERLIO
环境变量一起使用。看起来,当以这种方式设置时,它会替换默认层,当与 pragma 一起使用时,它会附加到默认值,尽管文档建议什么。)所以,
或者
Normally, on Windows, the
:crlf
PerlIO layer is used by default, which converts to and from CRLF line endings in the file to LF in the stringsperl
sees. Traditionally, the:raw
PerlIO layer would be used to prevent this, but according to the documentation:You can use the
open
pragma to change the default layers for opening files (And/or use the three argument version ofopen
to customize them on a per-file basis).In my testing (using Strawberry Perl 5.32), using
:perlio
with that pragma still did line ending conversion despite the above, so:raw
it is. (However,perlio
works with thePERLIO
environment variable. It looks like when set that way it replaces the default layers, when used with the pragma it appends to the defaults instead despite what the documentation suggests.)So,
or