Recherche/remplacement de texte sur plusieurs lignes
Fermé
tollan
-
Modifié par mamiemando le 25/03/2013 à 10:30
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 25 mars 2013 à 10:45
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 25 mars 2013 à 10:45
A voir également:
- Recherche/remplacement de texte sur plusieurs lignes
- Coco chat remplacement - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Excel cellule couleur si condition texte - Guide
- Transcription audio en texte word gratuit - Guide
2 réponses
mamiemando
Messages postés
33333
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
31 octobre 2024
7 800
Modifié par mamiemando le 25/03/2013 à 10:49
Modifié par mamiemando le 25/03/2013 à 10:49
Au pire tu peux faire intervenir dans un sed des retours à la ligne (\n), donc il suffit de dire que tu veux remplacer le motif 'dynasty=743\nreligion="\(.*\)"\nculture=".*"' par 'dynasty=743\nreligion="\1"\nculture="frankish"'.
Bon le truc c'est qu'en plus tu as des espaces en début fin de lignes donc on va devoir prendre ça en compte. Une suite de 0-n espaces se note " *".
Je pense que ça doit donner un truc du genre :
Bon après il faut construire ta regexp petit à petit si ça ne marche pas pour voir où elle bloque (par exemple au début tu substitues dynastie et petit à petit tu complètes le motif pour voir ce qui bloque.
Pour plus de détails regarde comment marche sed et un cours sur les expressions rationnelles.
https://fr.wikipedia.org/wiki/Stream_Editor
https://fr.wikipedia.org/wiki/Expression_rationnelle
Bonne chance
Bon le truc c'est qu'en plus tu as des espaces en début fin de lignes donc on va devoir prendre ça en compte. Une suite de 0-n espaces se note " *".
Je pense que ça doit donner un truc du genre :
sed -i 's/dynasty=743\n *religion="\(.*\)" *\n *culture=".*"/dynasty=743 *\n *religion="\1"\n *culture="frankish"' fichier.txt
Bon après il faut construire ta regexp petit à petit si ça ne marche pas pour voir où elle bloque (par exemple au début tu substitues dynastie et petit à petit tu complètes le motif pour voir ce qui bloque.
Pour plus de détails regarde comment marche sed et un cours sur les expressions rationnelles.
https://fr.wikipedia.org/wiki/Stream_Editor
https://fr.wikipedia.org/wiki/Expression_rationnelle
Bonne chance
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
25 mars 2013 à 10:45
25 mars 2013 à 10:45
Salut,
En partant de ton exemple de contenu de fichier voilà ce que ça donne avec "sed". Il te faudra rajouter l'option "-i" (voire "-i.bak" pour une sauvegarde) pour une prise en compte des vraies valeurs...
En partant de ton exemple de contenu de fichier voilà ce que ça donne avec "sed". Il te faudra rajouter l'option "-i" (voire "-i.bak" pour une sauvegarde) pour une prise en compte des vraies valeurs...
$ sed '/dynasty=743/{n;n;s/frankish/XXX/}' plop 205509 = { name="Pierre" dynasty=743 religion="catholic" culture="XXX" father=205502 mother=213118 1126.1.1 = { birth="1126.1.1" } 1183.4.10 = { death="1183.4.10" } } 205511 = { name="Constance" female=yes dynasty=744 religion="catholic" culture="frankish" father=214 mother=106524 1078.1.1 = { birth="1078.1.1" } 1108.9.1 = { give_job_title=title_regent } 1119.1.1 = { remove_title=title_regent } 1126.7.14 = { death="1126.7.14" } } 205512 = { name="Marie" female=yes dynasty=743 religion="catholic" culture="XXX" father=205500 mother=205730 1145.1.1 = { birth="1145.1.1" } 1198.1.1 = { death="1198.1.1" } } $;-))