【问题标题】:Powershell replace non matching entriesPowershell 替换不匹配的条目
【发布时间】:2013-12-17 13:57:36
【问题描述】:

我正在编写一个 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 列的值,并删除任何与预定义列表不匹配的条目。

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    这个?

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

    【讨论】:

    • 嗨克里斯蒂安,感谢您的回复,您的解决方案几乎就是我所需要的......使用该代码,我可以删除 1.1.1.1 、 2.2.2.2 等的所有痕迹,但我想要做的是删除任何不是 1.1.1.1 、 2.2.2.2 等的东西
    【解决方案2】:

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

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

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

    【讨论】:

    • 条件的右括号不正确。而-replace "*", "" 将永远无法工作
    【解决方案3】:

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

    如果您想创建一个包含所有不匹配内容的数组,可以将其更改为 -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
    }
    

    【讨论】:

      猜你喜欢
      • 2022-07-08
      • 2017-07-02
      • 1970-01-01
      • 2020-12-01
      • 2022-08-18
      • 2020-01-11
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      相关资源
      最近更新 更多