我有一个嵌入^ M的日志文件。我想用一个空格替换^ M. 我尝试过这方面的变种:
(Get-Content C:\temp\send.log) | Foreach-Object {$_ -replace "^M", ' '} | Set-Content C:\temp\send.out
输出文件包含一个换行符,其中每个^ M都是,而不是我想要的... ... 我试图解决的问题涉及检查文件的最后$ cnt行:
$new = Get-Content $fn | Select-Object -Last $cnt;
$new
当我显示$ new时,^ M被解释为CR / LF 如何删除/替换^ M?感谢您的任何指示......
答案 0 :(得分:0)
听起来^ M没有被你的-replace方法替换,很可能替换方法试图在字符串的开头替换大写字母M(^)。打开文件后,^ M将被解释为回车符。
也许在显示内容之前尝试替换回车符(^ M):
(Get-Content C:\temp\send.log) |
Foreach-Object {$_ -replace "`r", ' '} |
Set-Content C:\temp\send.out
或
$new = Get-Content $fn | Select-Object -Last $cnt;
$new.replace("`r"," ")
答案 1 :(得分:0)
这可以像转义^字符一样简单吗?如果您只需要文件的最后$ count行,则可以在Get-Content上使用-Tail参数。根据您是否需要匹配^ M作为区分大小写,您可以选择-creplace而不是-replace。
Get-Content $inputfile -Tail $count | ForEach-Object { $_ -creplace '\^m',' ' } | Set-Content $outputfile
答案 2 :(得分:0)
这不是一个答案,但既然你要了几个指针,这可能有助于把事情做好。
试试这个:
$new = Get-Content $fn | Select-Object -Last $cnt;
$new
$new.gettype()
$new[0].gettype()
我希望你能看到$ new是一个对象数组,$ new [0]是一个字符串。我建议$ new [0]不包含CR或LF或CRLF或类似的东西。我要建议,当你要求显示全新的$ new时,你得到的是CRLF的每个字符串($ new [0]后跟$ new [1] ......)作为分隔符插入。
如果我是对的,用空格替换CR或CRLF并不会对你有任何好处。它是输出到文件的CRLF,阻止您成功。
这是我解决问题的方法。