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 つに一致しないものをすべて削除し、他のすべての値は影響を受けないようにすることです。

これまでのところ、get-content と -replace オプション、さまざまな形式の選択文字列、正規表現などを使用してみましたが、今のところうまくいきません。これは私の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

各文字列を許容値の配列と比較し、それに応じて任意のアクションを実行できます。

$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 に答える