【发布时间】:2017-05-05 02:10:09
【问题描述】:
上周我要求你们用 .bat 脚本替换带有换行符的字符串。我已经意识到我的文件已经有一些回车符和换行符,我需要先将其删除,然后再进行替换。 用换行符替换 '#@#@#' 我正在使用下面的行。
(gc $Source) -replace "#@#@#", "`r`n"|set-content $Destination
所以我尝试实现相同的逻辑来替换 \r 和 \n,但是它不起作用。
(gc $Source) -replace "`n", ""|set-content $Destination
我的文件看起来像:
abc|d ef|123#@#@#xyz|tuv|567#@#@#
我需要让它看起来像
abc|def|123 xyz|tuv|567
就像我说的那样,用换行符替换行分隔符是可行的,但我需要先删除所有 cr 和 lf 字符,然后再执行此操作。
对于小文件,下面的脚本可以工作,但我的文件>1.5GB,它会抛出 OutofMemoryException 错误
param
(
[string]$Source,
[string]$Destination
)
echo $Source
echo $Destination
$Writer = New-Object IO.StreamWriter $Destination
$Writer.Write( [String]::Join("", $(Get-Content $Source)) )
$Writer.Close()
【问题讨论】:
-
我相信它不是重复的,因为我试图删除所有 \r 和 \n。不是组合。我也想用空格替换它们。
-
所以您尝试删除
\r和\n但保留\r\n? -
不,我正在尝试删除所有 \r 和 \n 。该文件不应该有换行符,因为 '#@#@#' 是行尾字符串。话虽如此,我是否将rowdelimiter设置为#@#@#,然后在powershell中逐行读取以删除\r,\n字符?
-
当你说你想删除所有 \r 和 \n 但不是组合时,你把我弄糊涂了。我不知道您是否可以在 PowerShell 中使用大于单个字符的分隔符。我的想法是将文件转换为十六进制,删除
0d和0a的所有实例,然后转换回 ASCII。 -
考虑到它是大文件,转换文件并删除不需要的字符是否省时?对于这种转换,您会推荐什么脚本?它必须是自动化的
标签: powershell batch-file replace