Sylvain Sauvage a écrit, jeudi 20 décembre 2007, à 16:30 :
[...]
>   Pour sed, les adresses ne fonctionnent que sur plusieurs
> lignes.

Oui,

>   En revanche, la négation :
> 
> >    /\([^Dd]...\|[dD]\([^a]..\|a\([^t].\|t[^e]\)\)\)\[/,/\]/y/ /_/

On peut tourner  la chose autrement : Sed  connaît la négation /motif/!,
et on peut emboîter des blocs entre accolades.

>   Mais ça devient très lourd à gérer avec sed. Il vaudrait
> vraiment passer à un vrai langage (Ruby, Perl???).

Sed est Turing-complet, mécréant !

>   Pour me pardonner d???avoir dit une ânerie :

> #!/usr/bin/ruby

Pfff. Sed peut aisément

 1/ Isoler les motifs à traiter entre deux lignes debut, fin :

 sed -e 's/\([a-z]\+\[[^]]*\])/BALISE_debut\n\1\nBALISE_fin\n/ig'

 2/ Traiter uniquement les susdits motifs :

 sed -e '/BALISE_debut$/,/^BALISE_fin$/{# Dans le bloc,
     /BALISE_/!{# ne pas traiter les bornes,
        /^\(truc\|machin\)/!{# ni ces motifs.
            s/[[:space:]]/_/g # traitement... 
        }
     }
 }'

 3/ Recoller les morceaux... (en exercice :)

-- 
Jacques L'helgoualc'h


-- 
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench   
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Répondre à