目前,我有一个系统,它创建一个像下面这样的分隔文件,在其中我模拟了偶尔出现在列中的额外换行符。
列 1、列 2、列 3、列 4
文本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 文件的内容时,文本字段中的换行符将被忽略,并且该值作为单独的对象存储在分配给 get-content 的变量中行动。我的问题是,如果 cmdlet 在加载数据时忽略换行符,如何使用替换将正则表达式应用到 csv 文件?
我还尝试了下面的方法来加载 csv 的内容,该方法也不起作用,因为它只会产生一个长字符串,这与使用 -join(get-content) 类似。
[STRING]$test = [io.file]::ReadAllLines('C:\CONV\DataOutput.csv')
$test.replace("(?<![\r])[\n]","")
$test | out-file .\DataOutput_2.csv
差不多了,我可以建议做 3 处改变:
- use
ReadAllText(…)
instead https://stackoverflow.com/a/2965533/653295 of ReadAllLines(…)
- use
-replace …
代替.Replace(…)
,只有这样第一个参数才会被视为regex
-
do具有替换结果的东西(例如将其分配回
$test
)
示例代码:
[STRING]$test = [io.file]::ReadAllText('C:\CONV\DataOutput.csv')
$test = $test -replace '(?<![\r])[\n]',''
$test | out-file .\DataOutput_2.csv
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)