【问题标题】:Powershell CSV Newline removalPowershell CSV 换行删除
【发布时间】:2016-06-05 05:24:17
【问题描述】:

大家好,如果之前已经回答过这个问题,我深表歉意。 我对 powershell 很陌生,需要一些指导。

我们有一个 MSSQL 服务器运行一个存储过程来生成一个 .csv 日志 然后通过 NXlog 获取此日志并转发到我们的日志服务器。

问题是其中一个字段包含多行查询,需要减少到单行

例如 当前格式

第 1 列|第 2 列|

3

| 第四栏

要求的格式

Column1|Column2|Column3|Column4

我目前正在使用以下内容,但现在幸运的是所需的格式

$csv = 'C:\Users\user\Documents\input.csv'
foreach ($csv_file in gci C:\Users\user\Documents\input.csv) {
  $csv1 = Import-csv $csv
    $props = $csv[0].psobject.properties | select -expand name
      $csv1 |
        foreach {
          foreach ($prop in $props){
              $_.$prop = $_.$prop -replace "`s`r`n`t",' '
              }
        }
  $csv1 | export-csv C:\Users\user\Documents\output.csv -NoTypeInformation
}

我相信新行在 sql 中使用 char13。如果需要,我可以提供一个示例 csv

如果能帮助我找到正确的方向,我们将不胜感激

谢谢

【问题讨论】:

  • -replace '\r?\n',' '

标签: sql csv powershell


【解决方案1】:

正则表达式使用反斜杠作为引号字符(参见here 的列表)。 "`s" 不会匹配单个空白字符。

正则表达式中的 CR-LF 序列是“\r\n”,所以你应该得到更好的结果

$text -replace "\s*\r\n\s*"," "

但是空白字符类“\s”已经匹配“\r”和“\n”(参见here),所以要匹配非CR/LF空白(opt)、CR-LF、非CR /LF 空格 (opt) 你需要这样的东西:

$text -replace "[\t \f\v\x85]*\r\n[\t \f\v\x85]**"," "

【讨论】:

  • 以听起来很愚蠢为代价,在我当前的脚本中我应该把它放在哪里?
  • 您目前在哪里使用-replace
  • 不幸的是结果是一样的,仍然有换行符
  • 如果有帮助,每个新行都应该以文本 DEV-AUDIT 开头。不确定是否可以将其用作所需新行的标识符?
  • @NoOne911 文件相关部分的十六进制转储:仔细检查确切那里有什么字符。
【解决方案2】:

感谢大家的帮助。

我们改变了方法,使用输出所需效果的 vbs 脚本。

主要问题是 SQL 输出到 csv 的方式导致格式问题

【讨论】:

    【解决方案3】:
      $_.$prop = $_.$prop -replace "`s`r`n`t",' '
    

    只会完全替换一个空白字符一个“s”,后跟一个回车符,后跟一个换行符,后跟一个制表符。

    如果要替换独立字符,请尝试使用

      $_.$prop = $_.$prop -replace "`r|`n|`t", ''
    

      $_.$prop = $_.$prop -replace "[`r`n`t]", ''
    

    编辑:正如理查德正确提到的,`s 不是任何东西的逃避。它将代替“s”。

    【讨论】:

    • 仅供参考:反引号-s 不是“匹配空格”reges 元字符。充其量是一个无效的 PowerShell 转义。
    • `r `n 和 `t 也不是正则表达式元字符。它们在执行“-replace”之前由 powershell 扩展。如果将双引号换成单引号,这些命令将不再起作用。
    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多