大家好,如果以前已经回答,我道歉。 我是powershell的新手,想要一些指导。
我们有一个运行存储过程的MSSQL服务器来生成.csv日志 然后通过NXlog获取此日志并将其转发到我们的日志服务器。
问题是其中一个字段包含多行查询,需要缩减为一行
e.g。 当前格式
列1 |列2 |
列
3
| Column4
所需格式
列1 |列2 |栏3 | 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
非常感谢任何帮助我走向正确方向的帮助
由于
答案 0 :(得分:0)
正则表达式使用反斜杠作为引用字符(有关列表,请参阅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]**"," "
答案 1 :(得分:0)
感谢您的帮助。
我们改变了使用输出所需效果的vbs脚本的方法。
主要问题是SQL输出到csv导致格式化问题的方式
答案 2 :(得分:-1)
$_.$prop = $_.$prop -replace "`s`r`n`t",' '
只会替换空白字符''后跟一个回车字符,后跟一个换行符,后跟一个制表符。
如果要替换独立字符,请尝试使用
$_.$prop = $_.$prop -replace "`r|`n|`t", ''
或
$_.$prop = $_.$prop -replace "[`r`n`t]", ''
编辑:正如理查德正确提到的那样,对任何事情都不是逃避。它将取代一个'代替。