URL: https://linuxfr.org/forums/programmation-shell/posts/les-regex-sed-dingue-comme-ce-nest-pas-facile Title: les regex sed dingue comme ce n'est pas facile... Authors: B16F4RV4RD1N Date: 2011年05月25日T01:06:42+02:00 Tags: regex Score: 2 bonjour, je veux passer un flux de texte dans divers pipes pour le transformer à l'aide de sed. Ça fait plus de 3/4 d'heure que je lutte avec ça. J'ai :> du texte et puis à la fin de la ligne, un numéro par exemple 42 je veux obtenir : ```text du texte et puis à la fin de la ligne, un numéro par exemple [[42 42]] ``` Dans l'idéal, toutes les lignes qui finissent par un nombre auraient ce nombre transformé en ```text [[nb nb]] ``` Or, à la 1ème tentative : ```text cat $(DOCUMENT).txt | sed -e "s/\(\d+\)$/[[1円 1円]]/g"> $(DOCUMENT)_export.tw ``` j'obtiens : ```text sed: -e expression n°1, caractère 20: commande `s' inachevée ``` J'ai essayé avec \([0-9]*\) à la place de \(\d+\), même message, avec \n ou \r à la place de ,ドル pas d'erreur mais ça ne fait pas de transformation. j'ai essayé également de renseigner le début de la ligne, avec un double remplacement, la portion de texte au début, puis le nombre à la fin : ```text sed -e "s/^\(.*\) \([0-9]*\)$/1円 [[2円 2円]]/g" ``` mais cela dit également commande `s' inachevée (avec ^ pour le début de ligne c'est accepté, mais pas la fin de ligne avec $) Ce que je ne comprends pas c'est que les divers cours sur les regex indiquent que le $ est pour la fin d'une ligne. Or man sed indique : $ Match the last line.