【问题标题】:In PowerShell how to replace carriage return在PowerShell中如何替换回车
【发布时间】:2018-05-11 03:27:13
【问题描述】:

在 PowerShell 脚本中,我将从 SQL Server 查询中读取的数据导出到一个 .csv 文件以制表符分隔。我需要删除所有回车符。

-replace '`r`n' 不工作。我认为角色是char(13)

这是我的代码行不起作用:

(Get-Content $MyCSV_DOR) | % {$_ -replace '`r`n', " "} | out-file -FilePath $MyCSV_DOR -Force -Encoding ascii

我也尝试过以下方法:

`r, `n, \r, \n and \r\n

他们都未能删除角色。我还查看了建议的其他帖子。

有什么建议吗?

【问题讨论】:

  • 你试过this
  • 单引号字符串不接受转义字符,只接受双引号字符,因此需要"`r`n",但是get-content 不会输出任何带有换行符的字符串,因为它会破坏归档换行符本身,并输出单独的行。您需要get-content -raw 将整个文件作为一个字符串读入管道,包括换行符
  • (Get-Content $MyCSV_DOR) -replace "`r`n" | Set-Content -Path $MyCSV_DOR -Force -Encoding ascii
  • 我总是用这个换行[Environment]::NewLine
  • @TessellatingHeckler 你应该把它作为问题+1的答案

标签: powershell replace carriage-return


【解决方案1】:

默认情况下,get-content 自动将文件拆分为换行符,如果out-file 接收到一个行数组,它会将换行符放回原处。所以你的-replace 什么都不做,因为Get-Content 已经删除了换行符。您需要使用-raw 参数将文件作为单个文本块读取。以下应该做你想要的

(Get-Content -Raw $MyCSV_DOR) -replace "[`r`n']+, ' ' | 
     Out-File -FilePath $MyCSV_DOR -Force -Encoding ascii -nonewline

注意:我更改了替换模式,将一个或多个回车符或换行符的任意序列替换为一个空格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2017-06-15
    相关资源
    最近更新 更多