Regex Powershell将替换不匹配的条目

Regex Powershell将替换不匹配的条目,regex,powershell,Regex,Powershell,我正在编写一个powershell脚本,用于编辑一些文本文件。到目前为止,我已经成功地使用selectstring提取了我想要编辑的所有行,然后在前面文章的帮助下,我成功地删除了每行上我不需要的所有信息。接下来我要做的是遍历每一行并删除与特定字符串不匹配的任何条目。因此,例如,文本文件可能包含以下条目: "1.1.1.1" "2.2.2.2." "3.3.3.3" "4.4.4.4" "1.2.3.4" "1.2.3.4" "1.1.1.1" "2.2.2.2" "3.3.3.3" "4.4.4

我正在编写一个powershell脚本,用于编辑一些文本文件。到目前为止,我已经成功地使用selectstring提取了我想要编辑的所有行,然后在前面文章的帮助下,我成功地删除了每行上我不需要的所有信息。接下来我要做的是遍历每一行并删除与特定字符串不匹配的任何条目。因此,例如,文本文件可能包含以下条目:

"1.1.1.1" "2.2.2.2." "3.3.3.3" "4.4.4.4" "1.2.3.4"
"1.2.3.4" "1.1.1.1" "2.2.2.2" "3.3.3.3" "4.4.4.4"
我想去掉任何不是“1.1.1.1”或“2.2.2.2”或“3.3.3.3”或“4.4.4.4”的内容

  • 所有条目都在双引号内
  • 需要删除的条目可能位于该行的任何位置
  • 需要删除的条目在每行上都不同
  • 需要保留的条目是固定的
基本上,我要做的是删除与6个可能的固定值中的1个不匹配的任何内容,并保留所有其他值不受影响。

到目前为止,我已经尝试使用带有-replace选项的getcontent、各种形式的select字符串、regex等,但到目前为止没有成功。这有点超出了我的Powershell知识范围

编辑:

我认为我最初尝试的方式不是正确的方式,也许我没有正确表达这个问题。我现在将所有条目都保存在一个csv文件中,其输出类似于以下内容:

1  : Dhcp
2  : Server
3  : 192.168.0.1
4  : Scope
5  : 192.168.0.10
6  : set
7  : optionvalue
8  : 6
9  : IPADDRESS
10 : 192.168.0.11    
11 : 192.168.0.12
12 : 192.168.0.13
13 : 192.168.0.14
14 : 192.168.0.15
15 : 192.168.0.16 
16 : 192.168.0.17
17 : 
18 : 
19 : 
20 : 

我想做的是浏览csv文件,检查每个条目第10-16列的值,并删除任何与预定义列表不匹配的条目。

您可以将每个字符串与可接受值的数组进行比较,并相应地执行任何操作

$array=“1.1.1.1”、“2.2.2.2”、“3.3.3.3”

如果($array-notcontains$data){$data-replace.“,”}

这是什么

$a -replace  '\s*"1.1.1.1"\s*|\s*"2.2.2.2"\s*|\s*"3.3.3.3"\s*|\s*"4.4.4.4"\s*'

只需从所有匹配行创建一个新数组,然后将文件内容设置为该新数组

如果要创建一个包含所有不匹配项的数组,可以将其更改为
-notmatch

$pattern = "1\.1\.1\.1|2\.2\.2\.2|3\.3\.3\.3|4\.4\.4\.4"
$file_path = "C:\text.csv"
$text_file = get-content $file_path
foreach ($line in $text_file) {
    if ($line -match $pattern) {
        $line += @($new_lines)
    }
$new_lines | set-content $file_path
}

条件的右括号不正确。和
-替换“*”,“
将永远不起作用Hi Christian,感谢您的回复,您的解决方案几乎就是我所需要的…使用该代码,我能够删除1.1.1、2.2.2等的所有痕迹,但我要做的是删除任何不是1.1.1、2.2.2等的内容