首页 > 解决方案 > 拆分直到行尾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

请建议我应该改变什么。

标签: powershell

解决方案


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阻止它-在行尾放置 a 。


推荐阅读