目前,我有一个系统可以创建一个分隔文件,如下所示,我已经模拟了偶尔列中的额外换行符。
列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
答案 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