拆分直到行尾powershell

问题描述 投票:-1回答:2

我正在尝试在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

请建议我应该改变什么。

powershell
2个回答
0
投票

正如在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

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阻止它在线的末端放置-

© www.soinside.com 2019 - 2024. All rights reserved.