首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取文本文件并检查特定位置的值,并在为true时进行更改

读取文本文件并检查特定位置的值,并在为true时进行更改
EN

Stack Overflow用户
提问于 2020-09-26 18:55:14
回答 2查看 797关注 0票数 0

我需要循环遍历多个文本文件,并在每一行文本的位置7中检查$值,并在找到时将其替换为*。但只有当它在第7位置时,我才不想改变它,如果它是在其他位置找到的。这就是我所得到的。任何帮助都将不胜感激。

代码语言:javascript
运行
复制
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 $_
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-26 22:13:03

在您的示例中,有什么东西不起作用,还是所有嵌套的子字符串都很烦人?

我会用regex做这个的。例如:

代码语言:javascript
运行
复制
$Lines = Get-Content -Path "C:\examplefile.txt" -raw

$Lines -replace '(?m)(^.{6})\$', '$1*'

为了解释这一判决:

?m表示它是多行的,因为我使用原始获取内容,而不是拉数组。数组也会工作,只是需要一个循环,就像你做的那样。

^.{6}行开始加上任何6个字符(捕获组1) $转义美元字符

$1*捕获组1保持原样,美元替换为*,其他任何未捕获的,因此留下未动。

票数 0
EN

Stack Overflow用户

发布于 2020-09-27 13:11:28

谢谢你的代码和解释。我意识到我忽略了-raw选项,它确实起了作用。将其放回文件中,似乎在每个文件的末尾添加了一行。除非你能想到为什么我不应该--我要把它忘了。

代码语言:javascript
运行
复制
Get-ChildItem 'C:\TEST\*.txt' -Recurse | ForEach {
     (Get-Content $_ | ForEach   { $_ -replace '(?m)(^.{6})\$', '$1*'}) |
     Set-Content $_
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64081433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档