URL: https://linuxfr.org/forums/programmationautre/posts/question-sed Title: Question sed Authors: gremous Date: 2009年01月28日T14:24:51+01:00 Tags: Score: 2 J'utilise sed depuis pas mal de temps mais des détails m'échappent. Aujourd'hui je bloque sur un truc tout simple et les tutoriaux et pages de manuels ne m'aident pas. J'ai du code html dont je veux extraire une adresse ip. Voici les 3 lignes qui m'interessent: td width="40%" class = "br_tb">prints(m_IPaddr); : td colspan=2 class = "bl_tb"> (TAB)(TAB)(TAB)117.18.244.113 Je ne mets pas les '<' car l'affichage devient incomplet (?!). C'est sans importance pour l'exemple. Je souhaite utiliser "prints(m_IPaddr)" pour détecter la zone à analyser (il y a dans ce code html plusieurs endroits contenant une adresse ip, mais seule la permière zone contient la valeur qui m'interesse). Ensuite je saute 2 lignes, j'ai des tabulations (notées (TAB) dans mon exemple) puis j'ai l'adresse que je souhaite extraire. Si j'utilise ça: sed -n '/prints(m_IPaddr)/ {N;N; {s#^.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)#1円#p}}' < fichier.html J'obtiens 17.18.244.113 il manque le premier chiffre, pourtant sed est soit-disant greedy par défaut. J'aimerais indiquer que le début de la ligne contient des tabulations ou des blancs. Alors j'utilise [ [ :blank:]]* ou [ \t]* mais ça ne donne rien: sed -n '/prints(m_IPaddr)/ {N;N; {s#^[ \t]*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)#1円#p}}' < fichier.html sortie=vide Si j'indique les 3 tabulations, idem, je n'obtiens rien: sed -n '/prints(m_IPaddr)/ {N;N; {s#^\t\t\t\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)#1円#p}}' < fichier.html sortie=vide Si je ne mets pas le '^' alors ça m'affiche les 3 lignes. Je ne comprends pas pourquoi non plus (option -n pourtant). Je sèche.

AltStyle によって変換されたページ (->オリジナル) /