2

我在 Windows 中使用 Powershell 将 Unix 生成的文件中的 '£'​​ 替换为 '$'。问题是输出文件在每一行的末尾都有 CRLF,而不是原来的 LF。当我在 Notepad++ 中查看原始文件时,状态栏告诉我它是 Unix ANSI,我想保持这种格式并在每行末尾添加 LF。我尝试了所有编码选项都没有成功,我也尝试过 Set-Content 而不是 od Out-File。我的代码是:

$old = '£'
$new = '$'
$encoding = 'UTF8'
(Get-Content $fileInfo.FullName) | % {$_ -replace $old, $new} | Out-File -filepath $fileInfo.FullName -Encoding $encoding

感谢您的帮助杰米

4

2 回答 2

5

@Keith Hill 为此制作了一个 cmdlet,ConvertTo-UnixLineEnding您可以在 Powershell 社区扩展中找到它

于 2013-01-09T10:43:42.410 回答
1

我意识到这是一个非常古老的问题,但是当我遇到类似的问题并认为我会分享对我有用的东西时,我偶然发现了它。这可能会在未来帮助其他编码人员,而无需第三方 cmdlet。

读取 Unix 格式文件时,即使用 LF 行终止符,而不是 CRLF Windows 样式行终止符,只需在Get-Content命令中的文件名后使用-Raw参数,然后以STRING编码类型输出,尽管 UTF8 编码可能有相同的结果 STRING 符合我的要求。

我遇到问题的特定命令是读取模板文件,替换一些变量然后输出到新文件。原始模板是 Unix 样式,但输出是 Windows 样式,直到添加 -Raw 参数,如下所示。请注意,这是我使用的从批处理文件调用的 powershell 命令,因此它的格式。

powershell -Command "get-content master.template -Raw | %%{$_ -replace \"@MASTERIP@\",\"%MASTERIP%\"} | %%{$_ -replace \"@SLAVEIP@\",\"%SLAVEIP%\"} | set-content %MYFILENAME%-%MASTERIP%.cfg -Encoding STRING"

我使用 Notepad++ 来检查结果文件的格式,这在我的案例中起到了作用。

于 2018-03-27T04:37:48.720 回答