Powershell替换不匹配的条目

时间:2012-11-23 15:35:25

标签: regex powershell

我有一个PowerShell脚本,我正在编辑一些文本文件。到目前为止,我已经设法使用选择字符串提取我想要编辑的所有行,然后在早期帖子的帮助下,我设法删除了我不需要的每一行的所有信息。我接下来要做的是遍历每一行并删除任何与特定字符串不匹配的条目。例如,文本文件可能包含以下条目:

"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选项的get-content,各种形式的select-string,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列的值,并删除与预定义列表不匹配的任何条目。

3 个答案:

答案 0 :(得分:0)

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

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

if($ array -notcontains $ data){$ data -replace“。”,“”}

答案 1 :(得分:0)

此?

$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*'

答案 2 :(得分:0)

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

如果您想创建一系列不匹配的数组,可以将其更改为-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
}