0

我有一个 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、各种形式的选择字符串、正则表达式等,但到目前为止还没有运气。这有点超出我的 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 列的值,并删除任何与预定义列表不匹配的条目。

4

3 回答 3

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
}
于 2013-12-17T05:57:36.250 回答
0

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

$array = "1.1.1.1","2.2.2.2","3.3.3.3"

if ($array -notcontains $data ) { $data -replace ".","" }

于 2012-11-23T16:38:47.563 回答
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*'
于 2012-11-23T16:54:35.010 回答