web-dev-qa-db-ja.com

文字列からテキストを削除するPowerShell

特定の文字の後の文字列内のすべてのテキストを削除する最良の方法は何ですか?私の場合は「=」で、私の場合は別の文字の後に,、しかしテキストをその間に保持しますか?

サンプル入力

=これを守って、

8
JoeRod

これを行う別の方法は、演算子 -replace を使用することです。

$teststring = "test=keep this, but not this."

$teststring -replace ".*=" -replace ",.*"

.*=は、等号までの任意の数の文字を意味します。

,.*は、コンマの後に任意の数の文字が続くことを意味します。

基本的に文字列のこれら2つの部分を削除するので、それらを置き換えるために空の文字列を指定する必要はありません。複数の-replacesを使用できますが、順序は左から右であることを覚えておいてください。

29
$a="some text =keep this,but not this"
$a.split('=')[1].split(',')[0]

返す

keep this
4
Adil Hindistan

これはあなたが望むことをするはずです:

C:\PS> if ('=keep this,' -match '=([^,]*)') { $matches[1] }
keep this
1
Keith Hill

これは本当に古いですが、これにつまずくかもしれない誰かのために私のわずかなバリエーションを加えたかったです。正規表現は強力なものです。

等号とコンマの間にあるテキストを保持するには:

-replace "^.*?=(.*?),.*?$",'$1'

この正規表現は、行の先頭から始まり、最初の等号まですべての文字を消去し、次のコンマまですべての文字をキャプチャし、行の終わりまですべての文字を消去します。次に、行全体をキャプチャグループ(括弧内のすべて)に置き換えます。少なくとも1つの等号の後に少なくとも1つのコンマが含まれる行と一致します。 Trixによる提案と似ていますが、その提案とは異なり、これは等号またはコンマのいずれかのみを含む行とは一致せず、両方が順番に並んでいる必要があります。

0
Nate

上記の@ benjamin-hubbardの回答を参照して、Aレコードのdnscmdの出力を解析し、PHP "辞書" /キーと値のIPとホスト名のペアを生成します。複数の-replace一緒に引数を取り、テキストを何も置き換えないか、 tab PHPファイルのデータをフォーマットします。

$DnsDataClean = $DnsData `
    -match "^[a-zA-Z0-9].+\sA\s.+" `
    -replace "172\.30\.","`$P." `
    -replace "\[.*\] " `
    -replace "\s[0-9]+\sA\s","`t"

$DnsDataTable = ( $DnsDataClean | `
    ForEach-Object { 
        $HostName = ($_ -split "\t")[0] ; 
        $IpAddress = ($_ -split "\t")[1] ; 
        "`t`"$IpAddress`"`t=>`t'$HostName', `n" ;
    } | sort ) + "`t`"`$P.255.255`"`t=>`t'None'"

"<?php
`$P = '10.213';
`$IpHostArr = [`n`n$DnsDataTable`n];

?>" | Out-File -Encoding ASCII -FilePath IpHostLookups.php

Get-Content IpHostLookups.php
0
user208145