Comment PowerShell regex multi-ligne de chaînes?
Bon, c'est me rend fou, parce que ma regex est de travailler sur Rubular, mais PowerShell ne fonctionne pas comme prévu.
- J'ai fait un Get-ChildItem sur un répertoire réseau et puis dirigé vers la sortie dans un fichier txt.
- Je suis allé à supprimer le répertoire des infos dans le fichier texte qui s'affiche comme suit:
- Quand j'ai utiliser PowerShell pour essayer et écrire une regex pour supprimer le Répertoire info, je rencontre quelques problèmes.
Lorsque j'utilise:
$var = Get-Contnet "file path"
$var -match "Directory.*"
PowerShell attrape le texte, je suis à la recherche d', MAIS il n'a pas de saisir le texte qui commence sur une nouvelle ligne, j'obtiens:
Directory: \\Drive\Unit\Proposals\Names\Location\crazy folder path\even crazier folder path\unbelievable folder path\
Alors... quand j'utilise:
$var -match "Directory.*\n.*"
Je ne reçois rien...
Quand je l'ai essayer sur Rublar il fonctionne très bien, ce qui me manque ici? Toute aide serait super, merci!
OriginalL'auteur Steve | 2012-06-13
Vous devez vous connecter pour publier un commentaire.
Filburt la réponse est bonne, et il ne ressemble pas à les expressions régulières sont le meilleur outil à utiliser ici. Cependant, vous tombé sur un problème qui peut causer de la confusion à nouveau en bas de la route. Le problème ici est que la variable que vous avez rempli avec
Get-Content
n'est pas un multi-ligne de chaîne. C'est un tableau de chaînes de caractères:Lorsque vous exécutez une regex match contre
$var
, il correspond à l'encontre de chaque objet du tableau (chaque ligne du fichier) individuellement. Il peut ne pas correspondre au delà de la fin d'une ligne parce que la ligne suivante est un nouvel objet.Une solution de contournement consiste à aplatir qu'tableau de chaînes de caractères en une chaîne unique comme ceci:
Dans Powershell, il peut parfois être difficile de dire quand vous avez affaire à une Chaîne unique de l'objet par rapport à un tableau de Chaînes de caractères. Si vous leur sortie de la console, ils semblent identiques. Dans ces cas,
GetType()
etOut-String
peuvent être des outils utiles.Edit: de Powershell 3.0, le
Filesystem
fournisseur comprend un-Raw
commutateur pourGet-Content
. Ce commutateur indiqueGet-Content
de lire le fichier à la fois, sans fractionnement en morceaux. Il est nettement plus rapide que d'utiliser leOut-String
solution de contournement, car il ne perd pas de temps, tirant pièces seulement de les mettre de nouveau ensemble.OriginalL'auteur ajk
Pourquoi ne pas choisir les propriétés souhaitées avant de tuyauterie à votre fichier?
OriginalL'auteur Filburt
Il est possible que les lignes ne se termine pas avec
\n
. Je crois que le standard de terminaison de ligne de caractères dans Windows est\r\n
. Essayez de ré-écriture de votre regex pour correspondre à ce que.Merci!!! A rayonnages de ma cervelle pendant une heure jusqu'à ce que j'ai vu votre post et résolu.
OriginalL'auteur Aaron Jensen