Powershell删除匹配文本

时间:2017-03-23 15:26:51

标签: powershell match lines

有没有人可以帮助我找到一种简单的方法来在文本文件中查找字符串,然后使用powershell删除匹配文本上方的10行?

例如,我沿着这些行有一个文本文件(我想找到多个类似文本的实例):

=============start============
random text
random text
random text
random text
random text
string I want to find
=============end============
=============start============
random text
random text
random text
=============end============
=============start============
random text
random text
random text
=============end============
=============start============
random text
random text
random text
=============end============
=============start============
random text
random text
random text
=============end============

所以在这个例子中,我想搜索"我希望找到的字符串的每个实例"当找到时删除匹配文本上方的X行,将其余部分输出到另一个.txt文件。上面的行数总是相同的。

我尝试将两个字符串之间的文本匹配如下:

(Get-Content -LiteralPath $Path\processing\data.txt) -replace     '$matchstart*$matchend','' |out-file $Path\processing\test.txt

然而,这似乎并没有给我我希望的输出(不会删除任何东西)。

这也有效,但可能会导致问题,因为起始字符串经常出现多次,并且可能导致我删除超出我想要的内容。

$str = Get-Content $Path\processing\pfxdetailpre.txt | out-string
$start = $str.indexOf($nokeystart) + 1
$end = $str.indexOf($nokeyend, $start)
$length = $end - $start
$result = $str.substring($start, $length)

以下似乎很有效删除我的字符串和之前的行。我无法弄清楚如何编辑它以删除上面的X行。

gc $file | %{
$a=$b=$null
}{
if($a){$a}
$a=$b
$b=$_
if($b -match $key){$a=$b=$null}
}{
if($b -notmatch $key){
if($a){if($b){"$a`n$b"}else{$a}}elseif($b){$b}
}
} | out-file $newfile

1 个答案:

答案 0 :(得分:0)

好的,所以使用LotPings建议我有以下代码对我有用。我无法使用' $ matchstart。* $ matchend所以我只是使用了原来不会改变的原始值:

所以,我的文件看起来像这样。我知道开始/结束的样子,但我只想删除它,如果它包含某个字符串:

except

我发现以下代码效果很好!

=============start============
random text
random text
random text
string I want to find
random text
random text
=============end============
=============start============
random text
random text
random text
=============end============
=============start============
random text
random text
random text
=============end============
=============start============
random text
random text
random text
=============end============
=============start============
random text
random text
random text
=============end============

我仍然希望听到其他人如何接近这一点。我对powershell很新,因为我只学了几个星期,这是我自己无法轻易弄明白的第一项任务。