web-dev-qa-db-fra.com

PowerShell pour supprimer du texte d'une chaîne

Quel est le meilleur moyen de supprimer tout le texte d'une chaîne après un caractère spécifique? Dans mon cas "=" et après un autre caractère dans mon cas, un ,, mais conservez le texte entre?

Exemple de saisie

= garde ça,

7
JoeRod

Une autre manière de procéder consiste à utiliser l'opérateur -replace .

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

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

.*= signifie tout nombre de caractères, y compris un signe égal.

,.* signifie une virgule suivie d'un nombre quelconque de caractères.

Étant donné que vous supprimez essentiellement ces deux parties de la chaîne, vous n'avez pas besoin de spécifier une chaîne vide pour les remplacer. Vous pouvez utiliser plusieurs remplacements, mais rappelez-vous que l'ordre est de gauche à droite.

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

résultats

keep this
4
Adil Hindistan

Cela devrait faire ce que vous voulez:

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

J'ai référencé la réponse de @ benjamin-hubbard ci-dessus pour analyser le résultat de dnscmd pour les enregistrements A et générer un couple PHP "dictionnaire"/paires valeur-clé d'adresses IP et de noms d'hôte. J'ai enfilé plusieurs -replace args ensemble pour remplacer du texte par rien ou tab formater les données pour le fichier 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