我需要循环遍历多个文本文件,并在每一行文本的位置7中检查$值,并在找到时将其替换为*。但只有当它在第7位置时,我才不想改变它,如果它是在其他位置找到的。这就是我所得到的。任何帮助都将不胜感激。
Get-ChildItem 'C:\*.txt' -Recurse | 
        foreach $line in Get-Content $_  {
        $linePosition1to5 = $line.Substring(0,6)
        $linePosition7    = $line.Substring(6,1)  
        $linePositionRest = $line.Substring(8)  
        if($linePosition7 = "$"){
           $linePosition7 = "*"  
            }
        $linePosition1to5 +  $linePosition7 + $linePositionRest |
     Set-Content $_
        }发布于 2020-09-26 22:13:03
在您的示例中,有什么东西不起作用,还是所有嵌套的子字符串都很烦人?
我会用regex做这个的。例如:
$Lines = Get-Content -Path "C:\examplefile.txt" -raw
$Lines -replace '(?m)(^.{6})\$', '$1*'为了解释这一判决:
?m表示它是多行的,因为我使用原始获取内容,而不是拉数组。数组也会工作,只是需要一个循环,就像你做的那样。
^.{6}行开始加上任何6个字符(捕获组1) $转义美元字符
$1*捕获组1保持原样,美元替换为*,其他任何未捕获的,因此留下未动。
https://stackoverflow.com/questions/64081433
复制相似问题