IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

regex -replace crochet + saut de ligne [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut regex -replace crochet + saut de ligne
    Bonjour à tous, je souhaite replacer deux crochets avec saut de ligne en powershell, sur mon regex101 ca match bien, mais dans mon code powershell ca ne semble pas fonctionner aurai je oublié un élément ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [
        "{\n\"id\": GROSPC14022020,\n\"name\":\"GROSPC\",\n\"date\":14022020,\n\"url\":[\"\\hosts\\GROSPC\\security\\14022020security.json\",\n\"\\hosts\\GROSPC\\application\\14022020application.json\", \n\"\\hosts\\GROSPC\\system\\14022020system.json\"]\n}"
    ]
    [
        "{\n\"id\": GROSPC14022020,\n\"name\":\"GROSPC\",\n\"date\":14022020,\n\"url\":[\"\\hosts\\GROSPC\\security\\14022020security.json\",\n\"\\hosts\\GROSPC\\application\\14022020application.json\", \n\"\\hosts\\GROSPC\\system\\14022020system.json\"]\n}"
    ]
    Doit devenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [
        "{\n\"id\": GROSPC14022020,\n\"name\":\"GROSPC\",\n\"date\":14022020,\n\"url\":[\"\\hosts\\GROSPC\\security\\14022020security.json\",\n\"\\hosts\\GROSPC\\application\\14022020application.json\", \n\"\\hosts\\GROSPC\\system\\14022020system.json\"]\n},"
        "{\n\"id\": GROSPC14022020,\n\"name\":\"GROSPC\",\n\"date\":14022020,\n\"url\":[\"\\hosts\\GROSPC\\security\\14022020security.json\",\n\"\\hosts\\GROSPC\\application\\14022020application.json\", \n\"\\hosts\\GROSPC\\system\\14022020system.json\"]\n}"
    ]
    Ci dessous vers mon regex101 "normalement" fonctionnel

    https://regex101.com/r/2X4LE2/2

    L'objectif étant de passer de multiples tableaux à un unique

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $PathRender = "C:\datas\render\render.json"
    [IO.File]::ReadAllText($PathRender) -replace '/("\n\]\n\[\n    )/gmi','," '  | Set-Content $PathRender

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Tu es sur que ta virgule ne devrait pas être en dehors des guillemets (a droite en l’occurrence) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [
        "{\n\"id\": GROSPC14022020,\n\"name\":\"GROSPC\",\n\"date\":14022020,\n\"url\":[\"\\hosts\\GROSPC\\security\\14022020security.json\",\n\"\\hosts\\GROSPC\\application\\14022020application.json\", \n\"\\hosts\\GROSPC\\system\\14022020system.json\"]\n},"
        "{\n\"id\": GROSPC14022020,\n\"name\":\"GROSPC\",\n\"date\":14022020,\n\"url\":[\"\\hosts\\GROSPC\\security\\14022020security.json\",\n\"\\hosts\\GROSPC\\application\\14022020application.json\", \n\"\\hosts\\GROSPC\\system\\14022020system.json\"]\n}"
    ]
    Pour répondre à ta question
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $PathRender = "render.json"
    [IO.File]::ReadAllText($PathRender) -replace '"\r?\n\]\r?\n\[\r?\n    ', ",""`r`n" | Set-Content -Path "rendertest.json"


    Sinon moi j'aurai plutôt procédé comme ceci (avec la virgule la ou je pense) :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $PathRender = "render.json"
    [IO.File]::ReadAllText($PathRender) -replace '\r?\n\]\r?\n\[\r?\n', ",`r`n" | Set-Content -Path "rendertest.json"

    Si tu souhaites réellement utiliser des préfixes d'expressions régulières tu doit les écrire comme ceci (je ne connait pas les compatibilités de syntaxes admises par Powershell) :
    (?i)
    (?c)
    (?x)
    (?t)

    voir :
    https://www.regular-expressions.info/powershell.html
    https://www.regular-expressions.info/modifiers.html

  3. #3
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    Salut, merci pour ta réponse, j'ai repris tes notes et sur regex101 ca match correctement également

    Dans mes test sous powershell ise, ca ne fonctionne pas

    Je ne comprend pas trop, quand je test la syntaxe sur une chaine simple ca fonctionne

    J'ai testé de supprimer les sauts de lignes, les tabulations et les espaces juste en gardant les "][", ca ne match pas sur ce simple double crochet powershell ne me les remplace pas même avec un échappement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [
        "{\n\"id\": GROC14022020,\n\"name\":\"GROC\",\n\"date\":14022020,\n\"url\":[\"\\hosts\\GROC\\security\\14022020security.json\",\n\"\\hosts\\GROSPC\\application\\14022020application.json\", \n\"\\hosts\\GROC\\system\\14022020system.json\"]\n}"
    ][
        "{\n\"id\": GROSPC14022020,\n\"name\":\"GROC\",\n\"date\":14022020,\n\"url\":[\"\\hosts\\GROSPC\\security\\14022020security.json\",\n\"\\hosts\\GROC\\application\\14022020application.json\", \n\"\\hosts\\GROC\\system\\14022020system.json\"]\n}"
    ]
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $PathRender = "render.json"
    [IO.File]::ReadAllText($PathRender) -replace '/(\]\[)/gmi', "TOTO"

    Aucun toto à l'horizon

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Au risque de me répéter, cette syntaxe /(\]\[)/gmi ne semble pas compatible avec Powershell (C# en fait).
    Voici la correspondance (l'option global n'étant pas disponible mais est par default) :

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $PathRender = "render.json"
    [IO.File]::ReadAllText($PathRender) -replace '(?mi)\]\[', "TOTO"

    Voir :
    https://www.regular-expressions.info/powershell.html
    https://docs.microsoft.com/fr-fr/dot...ession-options

  5. #5
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    Meaculpa je n'avais pas pris en compte ton avertissement pour /g, c'est maintenant fonctionnel :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    [IO.File]::ReadAllText($PathRender) -replace '(\]\r\[)', "," | Set-Content $PathRender

    J'ai opté pour aller au plus simple pour éviter d'avoir à traiter les saut de ligne , la syntaxe json est à présent valide

    Merci pour ton aide bon week end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. regex et saut de ligne avec remplacement de caractère
    Par zigomato dans le forum Général Python
    Réponses: 0
    Dernier message: 21/09/2016, 09h18
  2. [PowerShell] Regex - Probleme saut de ligne remplacement de caractère
    Par lucas057 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 04/12/2014, 14h25
  3. Regex qui traite les sauts de lignes
    Par sampaiX dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 26/06/2010, 12h04
  4. Replace: remplacement des sauts de ligne
    Par zut94 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/06/2008, 17h39
  5. Saut de ligne sans <br/>
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 21/06/2007, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo