我正在尝试在PowerShell中创建一个脚本,它在文本文件中的每两个字符之后添加一个连字符,我已经完成了但是我遇到了一个问题。
代码>
$file = get-content .\textfile.txt
($file -split "([a-z0-9]{2})" | ?{ $_.length -ne 0 }) -join "-" | Set-Content .\textfile.txt
如果我在.txt
文件中有如下值
000000000000
111111111111
输出就像。
00-00-00-00-00-00-11-11-11-11-11-11
我需要一个类似的输出。
00-00-00-00-00-00
11-11-11-11-11-11
请建议我应该改变什么。
正如在https://social.technet.microsoft.com/Forums/en-US/e60e33d2-f065-4219-82cf-5797aaf10891/split-foreach-line?forum=winserverpowershell的TechNet论坛上所回答的那样
这将在一行中每两个字符后添加一个破折号( - )。因为它也会在一行的末尾执行此操作,我们会修剪它。
$inputFile = Get-Content -Path C:\temp\file.txt
$newFile = foreach ($line in $inputFile) {
($line -replace '(..)', '$1-').trim('-')
}
$newFile | Set-Content -Path C:\temp\file.txt
Get-Content
删除所有换行符,并将字符串输出到管道,每行一个。
$file
是两个字符串的数组,@('000000000000', '111111111111')
。当你-split
它适用于两个字符串,它变成@('00', '00', '00', '00', '00', '00', '11', '11', '11', '11', '11', '11')
现在你无法分辨线的开始或结束。
要修复它,您需要单独处理每一行:
(Get-Content .\textfile.txt) | ForEach-object {
($_ -split "([a-z0-9]{2})" |? { $_ }) -join "-"
} | Set-Content .\textfile.txt
或者改变你正在做的替换,这将在行内工作而不是将它们合并在一起:
(gc .\textfile.txt) -replace '([a-z0-9]{2})\B', '$1-' | sc textfile.txt
并且\B
阻止它在线的末端放置-
。