我正在嘗試使用 Perl 的就地編輯功能在 Windows 上的 PowerShell 會話中更改具有 Unix 行結尾的檔案中的一些文本:
perl.exe -i'.bak' -p -e "s#PATTERN#REPLACEMENT#g" (get-childItem *.sql,*/*.sql)
不幸的是,行尾從 Unix 更改為 Windows。
有沒有一個選項可以調整這個襯里,使其不修改行尾?
uj5u.com熱心網友回復:
通常,在 Windows 上,默認使用:crlfPerlIO 層,它將檔案中的 CRLF 行結尾轉換為字串中的 LF perl。傳統上,:rawPerlIO 層將用于防止這種情況,但根據檔案:
如果您希望在通常執行 CRLF 轉換的平臺上使用 UNIX 行結尾,但仍需要 UTF-8 或編碼默認值,則適當的做法是添加
:perlio到 PERLIO 環境變數,或使用該層顯式打開句柄,以替換的平臺默認值:crlf。
您可以使用openpragma更改打開檔案的默認層(和/或使用三個引數版本open來根據每個檔案自定義它們)。
在我的測驗中(使用 Strawberry Perl 5.32),:perlio盡管有上述情況,使用 with that pragma 仍然會進行行尾轉換,所以:raw確實如此。(但是,perlio與PERLIO環境變數一起使用。當以這種方式設定時,它看起來會替換默認層,當與編譯指示一起使用時,它會附加到默認值而不是檔案建議的內容。)
所以,
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/439352.html
上一篇:如何防止PerlCGI->start_html()列印DOCTYPE標頭
下一篇:將位元組陣列轉換為十進制
