Question
\"ForEach -replace\" tout caractère après @
- Ruff
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 7 ans 4 mois #27705
par Ruff
\"ForEach -replace\" tout caractère après @ a été créé par Ruff
Hello,
Comme dit dans le titre, je cherche à remplacer tous les caractères précédés d'un @ dans chaque ligne de la colonne \"user\".
Voici le code que j'utilise mais j'ai l'impession que ça n'est pas ça
(un soucis avec \"@*\")
$PCs = import-csv \"E:\PowerShell\InventaireParc\InventaireParc.csv\" -Delimiter \";\" -header \"NomPC\",\"ENTITE\",\"NumeroSerie\",\"User\",\"Modele\",\"Dernier Inventaire\"
$PCs | Foreach {$_.user=$_.user -replace \"@*\",'DOMAINE.LOCAL';$_}
Cela me donne un truc du style :
User : DOMAINE.LOCALtDOMAINE.LOCALoDOMAINE.LOCALtDOMAINE.LOCALoDOMAINE..
J'ai l'impression qu'il me met chaque lettre du prénom de l'utilisateur suivi de DOMAINE.LOCAL...
Merci d'avance !!
Comme dit dans le titre, je cherche à remplacer tous les caractères précédés d'un @ dans chaque ligne de la colonne \"user\".
Voici le code que j'utilise mais j'ai l'impession que ça n'est pas ça
(un soucis avec \"@*\")
$PCs = import-csv \"E:\PowerShell\InventaireParc\InventaireParc.csv\" -Delimiter \";\" -header \"NomPC\",\"ENTITE\",\"NumeroSerie\",\"User\",\"Modele\",\"Dernier Inventaire\"
$PCs | Foreach {$_.user=$_.user -replace \"@*\",'DOMAINE.LOCAL';$_}
Cela me donne un truc du style :
User : DOMAINE.LOCALtDOMAINE.LOCALoDOMAINE.LOCALtDOMAINE.LOCALoDOMAINE..
J'ai l'impression qu'il me met chaque lettre du prénom de l'utilisateur suivi de DOMAINE.LOCAL...
Merci d'avance !!
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 7 ans 4 mois #27706
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:\"ForEach -replace\" tout caractère après @
Salut,
ta regex est fausse, car elle matche toutes les lettres avec le quantifier * :
[code:1]
$r=[regex]\"a*\"
$r.Matches('avant@après').captures.index
[/code:1]
Il faut créer un groupe avec un caractère servant 'd'ancrage' :
[code:1]
#groupe après @
'avant@après' -replace \"@(.*)\",'-Replace-'
#groupe avant @
'avant@après' -replace \"(.*)@\",'-Replace-'
[/code:1]
ta regex est fausse, car elle matche toutes les lettres avec le quantifier * :
Ce qui fait que tu remplaces chaque lettre :Correspond zéro, une ou plusieurs fois à l'élément précédent.
[code:1]
$r=[regex]\"a*\"
$r.Matches('avant@après').captures.index
[/code:1]
Il faut créer un groupe avec un caractère servant 'd'ancrage' :
[code:1]
#groupe après @
'avant@après' -replace \"@(.*)\",'-Replace-'
#groupe avant @
'avant@après' -replace \"(.*)@\",'-Replace-'
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Ruff
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 7 ans 4 mois #27707
par Ruff
Réponse de Ruff sur le sujet Re:\"ForEach -replace\" tout caractère après @
Nickel!
Merci pour l'info. J'ai du mal à comprendre ton explication, \"groupe... ancrage...\"
(surement trop novice pour comprendre)
Mais après avoir testé ceci, cela fonctionne...
[code:1]
$PCs = import-csv \"E:\PowerShell\InventaireParc\InventaireParc.csv\" -Delimiter \";\" -header \"NomPC\",\"ENTITE\",\"NumeroSerie\",\"User\",\"Modele\",\"Dernier Inventaire\"
$PCs | Foreach {$_.user=$_.user -replace \"@(.*)\",'@DOMAINE.LOCAL';$_}
[/code:1]
Merci pour l'info. J'ai du mal à comprendre ton explication, \"groupe... ancrage...\"
Mais après avoir testé ceci, cela fonctionne...
[code:1]
$PCs = import-csv \"E:\PowerShell\InventaireParc\InventaireParc.csv\" -Delimiter \";\" -header \"NomPC\",\"ENTITE\",\"NumeroSerie\",\"User\",\"Modele\",\"Dernier Inventaire\"
$PCs | Foreach {$_.user=$_.user -replace \"@(.*)\",'@DOMAINE.LOCAL';$_}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 7 ans 4 mois #27709
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:
xnyp351 écrit:

xnyp351 écrit:
Il faut juste te souvenir qu'une regex en interne, grosso modo, parcourt chaque caractère (on parle de consommation)
Ex:
le caractère n° 1 est-il égal ou pas à '@', la réponse est 'oui il n'est pas égal', alors on le remplace.Suivant.
le caractère n°2 est-il égal ou pas à '@', la réponse est 'oui il n'est pas égal', alors on le remplace.Suivant.
etc.
pour la caractère @ la réponse est 'oui il est égal',alors on le remplace.Suivant.
Voici de quoi l'être un tout petit peu moinssurement trop novice pour comprendre
xnyp351 écrit:
Les regex ne sont déjà pas aisée à expliquer simplement, alors expliquer pourquoi elle ne fonctionnent pas, c'est le niveau au dessusJ'ai du mal à comprendre ton explication
Il faut juste te souvenir qu'une regex en interne, grosso modo, parcourt chaque caractère (on parle de consommation)
Ex:
le caractère n° 1 est-il égal ou pas à '@', la réponse est 'oui il n'est pas égal', alors on le remplace.Suivant.
le caractère n°2 est-il égal ou pas à '@', la réponse est 'oui il n'est pas égal', alors on le remplace.Suivant.
etc.
pour la caractère @ la réponse est 'oui il est égal',alors on le remplace.Suivant.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.046 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- "ForEach -replace" tout caractère après @