Question Supprimer lignes entre 2 \"balises\" dans fichier

Plus d'informations
il y a 8 ans 8 mois #20561 par LHLB
Bonjour,
je souhaite faire du ménage dans le fichier qui nous sert à mapper les lecteurs réseaux utilisateurs, cette liste est très longue et les départs des utilisateurs n'ont jamais été corrigés dans ce fichier.
Le fichier se structure de cette façon :
[code:1]
[UTILISATEUR]
NET001=\\serveur\partage1
ALI001=S
NET002=\\serveur\partage2
ALI001=R
NET003=\\serveur\partage3
ALI003=T
END=UTILISATEUR
[/code:1]

Évidemment il peut y avoir beaucoup plus de lecteurs, et donc de lignes

Je souhaite donc pourvoir supprimer toutes les lignes entre la balise d'entrée ([UTILISATEUR]) et al balise de sortie (END=UTILISATEUR), et of course supprimer aussi ces balises.
Je vois pas trop comment faire ça, mais la structure serait du style :
Saisie d'un utilisateur
Mise en variable
Recherche dans le fichier de la variable
lister et supprimer les lignes jusque balise de fin
...
Toute aide sera la bienvenue !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 8 mois #20570 par SiSMik
Salut Ludo,

Pour régler ton soucis, on va se faire un peu d'expressions régulières :)

[UTILISATEUR]
NET001=\\serveur\partage1
ALI001=S
NET002=\\serveur\partage2
ALI001=R
NET003=\\serveur\partage3
ALI003=T
END=UTILISATEUR
[UTILISATEUR1]
NET001=\\serveur\partage1
ALI001=S
NET002=\\serveur\partage2
ALI001=R
NET003=\\serveur\partage3
ALI003=T
END=UTILISATEUR1
[UTILISATEUR2]
NET001=\\serveur\partage1
ALI001=S
NET002=\\serveur\partage2
ALI001=R
NET003=\\serveur\partage3
ALI003=T
END=UTILISATEUR2


j'ai créé ce fichier avec plusieurs utilisateurs.

Pour supprimer toutes les lignes correspondants à un utilisateur, tu peux utiliser le code suivant:

[code:1]$user = \"Utilisateur\"
$text = gc D:\powershell\help\test.txt -raw
$text -replace \"(?s)\[$user\].+END=$user\s\",\"\" | out-file D:\powershell\help\test2.txt[/code:1]

Un peu d'explications sur la regex:
- (?s) va prendre la ligne qui commence par \[$user\] (les \ servent à échapper [ et ] pour qu'ils ne soient pas intepréter)
- .+ va matcher toutes les lignes suivantes jusqu'à END=$user
- \s indique qu'on s'arrête là

@+

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 8 mois #20571 par LHLB
Merci Fabien.
ça fonctionne nickel, faut juste être en powershell v3 à mon avis, le paramêtre -raw de get-content n'existe pas en v2 visiblement.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 8 mois #20572 par SiSMik
Ok,

Essaye ça

[code:1]$user = \"Utilisateur\"
$text = gc D:\powershell\help\test.txt -Delimiter \"`0\"
$text -replace \"(?s)\[$user\].+END=$user\s\",\"\" | out-file D:\powershell\help\test2.txt[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 8 mois #20577 par LHLB
Pour une raison que j'ignore, l'encodage du nouveau fichier est différent
Il faut donc dans mon cas ajouter la balise Encoding au out-file pour garder le fichier en encodage ANSI:
[code:1]$text -replace \"(?s)\[$user].+END=$user\s\",\"\" | Out-File \\serveur\netlogon\USERTEMP.INI -Encoding Default[/code:1]

Message édité par: lhlb, à: 5/08/15 11:22<br><br>Message édité par: lhlb, à: 5/08/15 11:22

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.075 secondes
Propulsé par Kunena