【问题标题】:How can i delete lines from a text file only if the previous line contains a certain phrase仅当前一行包含某个短语时,如何从文本文件中删除行
【发布时间】:2019-07-16 15:26:01
【问题描述】:

我正在寻找一种方法,仅当前一行包含某个短语时,才通过 powershell 从文本文件中删除行

对 powershell 非常陌生,所以还没有尝试过很多东西。 我已经到了可以删除有问题的行的地步,但如果上面的行有特定的短语,我不知道如何从删除中保存行

$data = foreach($line in get-content C:\e.g\test.txt){ 
  if($line -like "*Example*"){

  }
  else{
    $line
  }
}

$data |set-content C:\e.g\test.txt -force

这会删除我需要删除的行,但也会删除我需要保存的行。

$data = foreach($line in get-content C:\e.g\test.txt){ 
  if($line -like "*Example*" -and previous line -like "*Phrase"*){

  }
  else{
    $line
  }
}

$data |set-content C:\e.g\test.txt -force

寻找类似上面关于如何指定上一行部分的内容

感谢任何人为此提供的任何帮助/解决方案。

【问题讨论】:

  • 在后面的代码 sn-p 中使用$previous_line 而不是previous line(并正确维护$previous_line 变量)。

标签: powershell


【解决方案1】:

您可以使用以下内容:

$previous = $null
$data = foreach ($line in Get-Content C:\e.g\test.txt) {
    if ($line -notlike "*Example*" -or $previous -notlike "*Phrase*") {
        $line
    }
    $previous = $line
}
$data | Set-Content C:\e.g\test.txt -force

如果满足上述条件之一,则不会删除该行。因此,-or 之间的两个条件都需要为 false 才能忽略该行。

【讨论】:

  • 谢谢,能够用它来做需要的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 2019-07-27
  • 2022-01-17
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 2015-07-15
相关资源
最近更新 更多