我正在尝试在PowerShell中编写一个脚本,该脚本在文本文件中每隔2个字符后添加一个连字符,我已经做到了,但是我遇到的问题是。
代码>
$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
请提出我应该更改的内容。
答案 0 :(得分:1)
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
阻止它在行的末尾放置-
。
答案 1 :(得分:0)
这将在一行中每两个字符后添加一个破折号(-)。由于它也会在一行的结尾处执行此操作,因此我们对其进行修剪。
$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