En Powershell, comment rechercher chaque ligne d'un fichier texte dans un tableau de motifs ? Le motif de Select-string peut accepter un tableau, mais il renvoie une valeur vraie si l'une des chaînes du tableau est trouvée. J'ai besoin qu'il renvoie la valeur vraie (ou effectivement les lignes) si TOUTES les chaînes du tableau sont trouvées dans la ligne. Merci.
Réponses
Trop de publicités?Pour faire correspondre un tableau de chaînes de caractères à un tableau de motifs, je pense que vous avez besoin de quelque chose comme ceci :
$patterns = @( ... )
Get-Content sample.txt | % {
$count = 0
foreach ($p in $patterns) {
if ($_ -match $p) { $count++ }
}
if ($count -eq $patterns.Length) { $_ }
}
ou comme ça :
$patterns = @( ... )
$content = Get-Content sample.txt
foreach ( $line in $content ) {
$count = @($patterns | ? { $line -match $_ }).Length
if ( $count -eq $patterns.Length ) { $line }
}
Shay Levy
Points
41404
mjolinor
Points
23012
Quelques autres possibilités :
$patterns = 'abc','def','ghi'
$lines = 'abcdefghi','abcdefg','abcdefghijkl'
:nextline foreach ($line in $lines)
{foreach ($pattern in $patterns)
{if ($line -notmatch $pattern){continue nextline}
}$line}
abcdefghi
abcdefghijkl
Cela permet d'abandonner la poursuite du traitement d'une ligne dès que l'un des motifs ne correspond pas.
Cela fonctionne sur l'ensemble de la collection de lignes en une seule fois, plutôt que de faire un foreach :
$patterns = 'abc','def','ghi'
$lines = 'abcdefghi','abcdefg','abcdefghijkl'
foreach ($pattern in $patterns)
{$lines = $lines -match $pattern}
$lines
abcdefghi
abcdefghijkl
Remplacez votre get-content par les littéraux de test pour remplir $lines.