Powershell输入破折号“-&引用;如果存在数字或字母,则在文件的每一行中的字符79处

Powershell输入破折号“-&引用;如果存在数字或字母,则在文件的每一行中的字符79处,powershell,Powershell,我真的需要一些帮助。我的大部分代码都可以使用,但我在找到只在79的每个字符位置添加a的方法时遇到了问题,但这只能在存在数字或字母的情况下进行。下面的代码在正确的位置添加了破折号,但是如果位置79处的字符是空格,我想不出不添加破折号的方法 (gc C:\test\tst1.txt)-替换“{79}”,“$&-”| sc C:\test\out.txt您可以执行以下操作,在字符79处插入满足所需条件的-: (Get-Content C:\test\tst1.txt) -replace '^.{79}

我真的需要一些帮助。我的大部分代码都可以使用,但我在找到只在79的每个字符位置添加a的方法时遇到了问题,但这只能在存在数字或字母的情况下进行。下面的代码在正确的位置添加了破折号,但是如果位置79处的字符是空格,我想不出不添加破折号的方法


(gc C:\test\tst1.txt)-替换“{79}”,“$&-”| sc C:\test\out.txt

您可以执行以下操作,在字符79处插入满足所需条件的
-

(Get-Content C:\test\tst1.txt) -replace '^.{79}(?<=[a-z0-9])','$&-' |
   Set-Content C:\test\out.txt
由于PowerShell正则表达式不支持匹配重置,因此此场景可能会有一个更详细的解决方案


请注意,您的评论和您的帖子描述没有相同的要求。上面的代码在字符位置79处添加了一个
-
,并将先前的位置79 EndOfString向右移动。它不能取代。执行实际替换时,将如下所示:

$regex = '(.{78}[^a-z0-9])|(.{78}[a-z0-9])'
$sb = { param($m)
        if ($m.Groups[2].Success) {
            "{0}-" -f $m.Groups[2]
        } else {
            $m.Groups[1]
        }
}
Get-Content c:\test\tst1.txt | Foreach-Object {
    [regex]::Replace($_,$regex,$sb)
} | Set-Content C:\test\out.txt
(Get-Content C:\test\tst1.txt) -replace '(^.{79})(?<=[a-z0-9]).','$1-' |
   Set-Content C:\test\out.txt

(获取内容C:\test\tst1.txt)-替换“(^.{79})(?如果字符79不是空格,您想替换它吗?正确。如果有值,我想用破折号替换字符79。如果有空格,我不想在测试中添加破折号,因为它也替换了空格。@DougMaurer Test
“111111111111111111111111111111111111111111111111111111111111111111111111111922222'-替换“^.{79}”(?很抱歉造成混淆。刚开始编写代码,玩得很开心,但有很多东西需要学习!另一项我没有详细说明的是它只是第79个字符。它是文本文件中每行的第79个字符。我从{79}中删除了^代码的一部分似乎有效,但在我的文本文件中,经常在字符162处添加破折号。这可能是因为脚本将字符替换为破折号,而不是插入-并保留添加破折号的字符。很抱歉我没有解释清楚这一点=\。我将继续玩代码为nd。发现了问题的一部分。我用“$&-”替换了“$1-”,但经常在162字符中出现破折号。嗯,更深入地了解it@oomotofxoo我添加了一个部分,它将替换符合条件的第79个字符。