拆分直到行shell结束为止

时间:2018-09-05 04:59:55

标签: powershell

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

请提出我应该更改的内容。

2 个答案:

答案 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)

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