gpt4 book ai didi

powershell - 如何使用 Powershell Out-File 获取 $ 样式的文件结尾

转载 作者:行者123 更新时间:2023-12-04 07:45:27 25 4
gpt4 key购买 nike

我遇到了行尾问题。我有一个由 git 跟踪的文件。然后我尝试使用 PowerShell 重新创建该文件 $content | Out-File $location并且 git 正在跟踪以 EOF 结尾的行的变化。
如果在终端中我运行 file ./somefile.sql (该文件已经在 git 中)
我得到一个输出 ./somefile.sql ASCII text, with CRLF line terminators运行 cat -ve ./somefile.sql文件的最后 2 行显示

^M$
END^M$  #'END' is actual text in the file
如果在终端中我运行 file ./dupfile.sql (PowerShell 创建的文件)
我得到一个输出 ./dupfile.sql ASCII text, with CRLF, LF line terminators运行 cat -ve ./dupfile.sql文件的最后 2 行显示
^M$
END$ 
如果我将 Out-File 更改为使用 $content | Out-File $location -NoNewLine并检查 dupfile再次输出我得到: ASCII text, with CRLF line terminators...但...
^M$
END%
我如何使用 Out-File写信 $content并得到一个 ^M$像我在 git 中那样结束?

最佳答案

使用以下内容(假设 $content 包含一个字符串):

Set-Content -NoNewLine $location -Value ($content + "`r`n")
上述解决方案假设 $content是一个单行多行字符串,并在其中附加一个 CRLF 序列(表示为 "`r`n" ,一个带有转义序列的 expandable string),然后使用 -NoNewLine 将其按原样写入目标文件.
请继续阅读背景信息。

如果你知道你正在处理字符串, Set-Content 性能优于 Out-File .
两个 cmdlet 都表现出相同的换行符处理(尽管它们的默认字符编码在 Windows PowerShell 中有所不同,幸运的是不再在 PowerShell (Core) 7+ 中,其中(无 BOM)UTF-8 一直使用):
  • 对于多个输入对象,平台原生的换行序列在保存时插入(字符串化的)对象之间,即 Windows 上的 CRLF,Unix 上的 LF - 如 [Environment]::NewLine 所示.
  • 默认情况下,会附加一个尾随平台原生换行符。

  • 关于 -NoNewLine :
  • -NoNewLine不仅抑制尾随换行符,还抑制多个输入对象之间的换行符(如果适用)。
  • 如果输入是单行多行字符串,可以使用 -NoNewLine将其按原样写入文件到文件(这意味着该字符串的尾随换行符或非状态按原样保留)。但是,对于多个字符串,您可以有效地获得没有分隔符的字符串连接。

  • 请注意 Get-Content 有一个 -Delimiter参数,其中 Out-FileSet-Content/ Add-Content缺少。
    GitHub issue #3855建议引入此参数,这将允许您按需请求使用非本地换行序列,例如 -Delimiter "`r`n"在 Unix 上,和 -Delimiter "`n"在 Windows 上。

    关于powershell - 如何使用 Powershell Out-File 获取 $ 样式的文件结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67220461/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com