Powershell替换和删除

帕特里克·勃兰特

我需要1234使用标记找到字符串的代码====-,然后替换####1234,然后删除该行====-1234

文本文件可以具有一组(示例文本A):

A;1;1;####;19/01/2015;08:45:58;UNKNOWN;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;
====-1234

或多个组(示例文本B):

A;1;1;####;19/01/2015;08:45:58;UNKNOWN;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;
====-1234
A;1;1;####;19/01/2015;08:45:58;UNKNOWN;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;
====-5678

到目前为止的代码现在将删除文本文件中的所有内容。有什么帮助吗?

$regex = 
@'
(?ms)(.+?####;
.+?)
====-(\d+)
'@

Get-Childitem -Path C:\somedir -Filter *.txt |
  foreach {

    $text = Get-Content $_ 

    ([regex]::matches($text,$regex) |
      foreach {
        $_.groups[1].value -replace '####',($_.groups[2].value)
      }) -join '' |
      Set-Content $_.FullName
  }
arco444

ArrayList在这种情况下,您可能会受益于使用以下方法遍历文件,并在遇到####时记下位置====-

然后,它可以通过首先直接替换####找到的索引处的内容,其次通过使用删除遇到的条目removeAt方法ArrayList修改这些位置处的内容====-

[System.Collections.Arraylist]$t = Get-Content .\sampleb.txt
$removeAt = @()

$i = 0
while($i -lt $t.count) {

  if($t[$i] -match "####") {
      $start = $i
  }
  if($t[$i] -match "====-(\d+)") {
      $newval = $t[$start] -replace "####", $matches[1]
      $t[$start] = $newval
      $removeAt += $i
      $start = $i
  }

  $i += 1
}

foreach($idx in ($removeAt | Sort-Object -Descending)) {
    $t.removeAt($idx)
}

$t

产出

A;1;1;1234;19/01/2015;08:45:58;UNKNOWN;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;
A;1;1;5678;19/01/2015;08:45:58;UNKNOWN;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;
B;0;0;0;319.95;
B;0;0;0;319.89;

这确实假定您的文件是一致的,并且====- 始终跟随####并且两者是平衡的。否则,需要额外的逻辑来说明这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Powershell替换和删除

来自分类Dev

Powershell:多次替换和删除

来自分类Dev

在 PowerShell 中删除和替换 ps 文件中的子字符串

来自分类Dev

Powershell查找替换和备份

来自分类Dev

Powershell - 查找和替换日期

来自分类Dev

如何删除或替换Powershell中的内置别名?

来自分类Dev

如何查找和删除而不是替换

来自分类Dev

替换和删除列名称中的字符

来自分类Dev

替换和删除列中的文本

来自分类Dev

Notepad ++使用查找和替换删除行

来自分类Dev

如何查找和删除而不是替换

来自分类Dev

在Case语句中删除和替换

来自分类Dev

Powershell搜索和替换中的编码问题

来自分类Dev

在PowerShell中替换与号和双与号

来自分类Dev

为什么Powershell在替换时会删除“ $”之一?

来自分类Dev

为什么Powershell在替换时会删除“ $”之一?

来自分类Dev

使用Powershell添加和删除Xmlnode

来自分类Dev

从网址中删除.php和id并用斜杠替换

来自分类Dev

使用SQL Server删除和替换表中的条目

来自分类Dev

如何通过单击按钮删除和替换JPanel?

来自分类Dev

如何在VS代码搜索和替换中删除整行?

来自分类Dev

AWK删除域和替换列之后的所有内容

来自分类Dev

从网址中删除.php和id并用斜杠替换

来自分类Dev

哪个更好:选择更新,删除和插入还是替换?

来自分类Dev

使用Gradle删除和/或替换Nexus中的工件

来自分类Dev

用正则表达式删除和替换字符

来自分类Dev

从数组javascript中的对象中删除和替换项

来自分类Dev

删除和替换.php文件中的字符串

来自分类Dev

如何同时替换<br> </br>和删除href属性?