我如何使用 Perl 在 Windows 上使用 Unix-EOL 对文件进行就地编辑?
How can I use Perl for in-place-editing of files with Unix-EOL on Windows?
我正在尝试使用 Perl 的就地编辑 功能在 Windows 的 PowerShell 会话中更改文件中具有 Unix 行结尾的一些文本:
perl.exe -i'.bak' -p -e "s#PATTERN#REPLACEMENT#g" (get-childItem *.sql,*/*.sql)
不幸的是,行尾从 Unix 更改为 Windows。
是否可以选择调整这一行使其不修改行尾?
通常,Windows,:crlf
PerlIO layer is used by default, which converts to and from CRLF line endings in the file to LF in the strings perl
sees. Traditionally, the :raw
PerlIO layer would be used to prevent this, but according to the documentation:
If you want UNIX line endings on a platform that normally does CRLF translation, but still want UTF-8 or encoding defaults, the appropriate thing to do is to add :perlio
to the PERLIO environment variable, or open the handle explicitly with that layer, to replace the platform default of :crlf
.
您可以使用 open
pragma 更改打开文件的默认图层(And/or 使用 open
的三参数版本在 per-file 的基础上自定义它们).
在我的测试中(使用 Strawberry Perl 5.32),使用 :perlio
和该 pragma 仍然进行行结束转换,所以 :raw
是。 (但是,perlio
与 PERLIO
环境变量一起使用。看起来像这样设置时它会替换默认层,当与 pragma 一起使用时它会附加到默认值而不是尽管文档建议。)
所以,
PS> perl.exe -Mopen="IO,:raw" -i'.bak' -p -e "s#PATTERN#REPLACEMENT#g" (get-childItem *.sql,*/*.sql)
或
PS> $env:PERLIO="perlio"
PS> perl.exe -i'.bak' -p -e "s#PATTERN#REPLACEMENT#g" (get-childItem *.sql,*/*.sql)
我正在尝试使用 Perl 的就地编辑 功能在 Windows 的 PowerShell 会话中更改文件中具有 Unix 行结尾的一些文本:
perl.exe -i'.bak' -p -e "s#PATTERN#REPLACEMENT#g" (get-childItem *.sql,*/*.sql)
不幸的是,行尾从 Unix 更改为 Windows。
是否可以选择调整这一行使其不修改行尾?
通常,Windows,:crlf
PerlIO layer is used by default, which converts to and from CRLF line endings in the file to LF in the strings perl
sees. Traditionally, the :raw
PerlIO layer would be used to prevent this, but according to the documentation:
If you want UNIX line endings on a platform that normally does CRLF translation, but still want UTF-8 or encoding defaults, the appropriate thing to do is to add
:perlio
to the PERLIO environment variable, or open the handle explicitly with that layer, to replace the platform default of:crlf
.
您可以使用 open
pragma 更改打开文件的默认图层(And/or 使用 open
的三参数版本在 per-file 的基础上自定义它们).
在我的测试中(使用 Strawberry Perl 5.32),使用 :perlio
和该 pragma 仍然进行行结束转换,所以 :raw
是。 (但是,perlio
与 PERLIO
环境变量一起使用。看起来像这样设置时它会替换默认层,当与 pragma 一起使用时它会附加到默认值而不是尽管文档建议。)
所以,
PS> perl.exe -Mopen="IO,:raw" -i'.bak' -p -e "s#PATTERN#REPLACEMENT#g" (get-childItem *.sql,*/*.sql)
或
PS> $env:PERLIO="perlio"
PS> perl.exe -i'.bak' -p -e "s#PATTERN#REPLACEMENT#g" (get-childItem *.sql,*/*.sql)