在powershell的列中处理带有换行符的CSV

时间:2013-01-10 23:38:01

标签: powershell csv

目前,我有一个系统可以创建一个分隔文件,如下所示,我已经模拟了偶尔列中的额外换行符。

  
    

列1,列2,栏3,Column4

         

文本1,文本2 [LF],文字3 [LF],文本4 [CR] [LF]

         

文本1,文本2 [LF] [LF],文字3,文本4 [CR] [LF]

         

文本1,文本2,文字3 [LF] [LF],文本4 [CR] [LF]

         

文本1,文本2,文字3 [LF],文本4 [LF] [LF] [CR] [LF]

  

我已经能够通过使用Notepad ++使用以下REGEX来忽略有效的回车/换行组合来删除引起我关注的换行符:

(?<![\r])[\n]

然而,我无法找到使用PowerShell的解决方案,因为我认为当我获取csv文件的内容时,文本字段中的换行符将被忽略,并且该值将作为单独的对象存储在分配给该文件的变量中。获取内容动作。我的问题是如果在加载数据时cmdlet忽略换行符,如何使用replace将正则表达式应用于csv文件?

我还尝试了下面的方法来加载我的csv的内容,它不起作用,因为它只会产生一个长字符串,这类似于使用-join(get-content)。

[STRING]$test = [io.file]::ReadAllLines('C:\CONV\DataOutput.csv')
$test.replace("(?<![\r])[\n]","")
$test | out-file .\DataOutput_2.csv

1 个答案:

答案 0 :(得分:3)

几乎在那里,我可以建议只改变3次:

  • 使用ReadAllText(…)
  • ReadAllLines(…) instead
  • 使用-replace …代替.Replace(…),只有这样才能将第一个参数视为正则表达式
  • 执行替换结果(例如将其分配回$test

示例代码:

[STRING]$test = [io.file]::ReadAllText('C:\CONV\DataOutput.csv')
$test = $test -replace '(?<![\r])[\n]',''
$test | out-file .\DataOutput_2.csv