Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/07/2022, à 06:50

OlivierM72

modifier un fichier texte. insérer motif si présent après

Bonjour,
j'ai une difficulté pour modifier un fichier texte. Je suis ouvert à toutes les solutions en bash ou éditeur sed, awk, grep...

Les parties du fichier texte que je souhaite modifier se présentent typiquement de la façon suivante:

_face_651
{
    type w;
    nF 6;
    startF 63948413;
    inGs       1(RotX);
}

_face_802
{
    type w;
    nF 3;
    startF 63945413;
    inGs       1(RotY);
}

Il y a ici 2 sous-ensembles. Le but est, pour chaque sous-ensemble, de récupérer l'information entre parenthèses (ici RotX ou RotY) et de l'insérer en début de 1ère ligne pour chaque (ici devant _face_651 ou _face_802), ce qui donnerait:

RotX_face_651
{
    type w;
    nF 6;
    startF 63948413;
    inGs       1(RotX);
}

RotY_face_802
{
    type w;
    nF 3;
    startF 63945413;
    inGs       1(RotY);
}

Auriez-vous quelques pistes à m'indiquer pour trouver une solution?
Merci

Hors ligne

#2 Le 27/07/2022, à 08:19

gigiair

Re : modifier un fichier texte. insérer motif si présent après

Avec Emacs, tu peux effectuer un remplacement avec des regexp, soit en mode interactif

C-M-% \(_face_[0-9]\{3\}[^{]*{[^}]*(\([^)]+\))\) RET \2\1

Soit en mode script (je te laisse le soin de l'écrire, c'est assez trivial, l'essentiel est dans la regexp que l'on peut construire en utilisant M-x re-builder). Dans ce cas la regexp est "\\(_face_[0-9]\\{3\\}[^{]*{[^}]*(\\([^)]+\\))\\)"
L'avantage des regexps de Emacs est qu'elles permettent d'inclure plusieurs lignes dans les captures.


--
JJR.

Hors ligne

#3 Le 27/07/2022, à 09:55

pingouinux

Re : modifier un fichier texte. insérer motif si présent après

Bonjour,
Avec python :

$ cat script.py
#!/usr/bin/env python3
import re, sys

rec=re.compile('^(_[^\n]+\n{.*?\()(.+?)(\).+?})',re.S|re.M)
sys.stdout.write(rec.sub(r'\2\1\2\3',sys.stdin.read()))

À appeler ainsi :

./script.py <fichier_in >fichier_out

Hors ligne

#4 Le 27/07/2022, à 10:56

Watael

Re : modifier un fichier texte. insérer motif si présent après

salut,

sed -nz 's/\([^(]*(\([^)]*\))[^_]*\)/\2\1/gp'

?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne