Re: [SHELL] remplacer un ca ractère dans une sous-chaine

2007-12-20 Thread Vincent Lefevre
On 2007-12-20 13:55:59 +0100, François TOURDE wrote:
> Le 13867ième jour après Epoch,
> Daniel Caillibaud écrivait:
> > marchera mieux (un peu, car ça ne substitue que la derniere espace
> > située entre crochet, le .* est gourmand).
> 
> On peut diminuer sa "cupidité" en rajoutant un '?' après... Ce qui
> donnerait .*? mais qui ne marche pas chez moi :(

Je ne pense pas que ce soit standard. C'est une extension dans
les regexp de Perl (et tout ce qui les utilise), non?

-- 
Vincent Lefèvre <[EMAIL PROTECTED]> - Web: 
100% accessible validated (X)HTML - Blog: 
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


-- 
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]



Re: [SHELL] remplacer un ca ractère dans une sous-chaine

2007-12-20 Thread Jacques L'helgoualc'h
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]



Re: [SHELL] remplacer un ca ractère dans une sous-chaine

2007-12-21 Thread Jacques L'helgoualc'h
Sylvain Sauvage a écrit, vendredi 21 décembre 2007, à 10:31 :
> Jacques L'helgoualc'h, jeudi 20 décembre 2007, 22:05:14 CET
> > [...] Sed  connaît la négation /motif/!,
> 
>   Ah oui, tiens. On ne lit jamais assez bien les docs.

Justement, « info  sed » est bien  l'une des rares  documentations qu'on
peut  lire  d'un  bout  à  l'autre...   Bon,  aller  fouiner  aussi  sur
http://sed.sf.net/ peut aider.

> > >   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 !
> 
>   Argument facile : c???est une chose d???avoir une machine de
> Turing, c???en est une autre d???écrire des programmes utiles avec. 

Le problème avec Sed, ce n'est pas l'utilité --- plutôt la lisibilité :/

[...]

>   Gestion des [] imbriqués ? :oP

Si la profondeur reste raisonnable et limitée, c'est possible, mais vite
lourd : la récursivité n'est certes pas un point fort de Sed.

Dans le problème  posé, il serait sans doute  plus expéditif de corriger
les quelques mots erronés qui peuvent apparaître, s'ils ne sont pas trop
nombreux :

~ $ echo 'Perm ission crit ical perm ission' |
> ]sed -e 's/\(perm\)[[:space:]]\+ission/\1ission/ig 
> ]s/\(crit\)[[:space:]]\+ical/\1ical/ig'
Permission critical permission

> >  3/ Recoller les morceaux... (en exercice :)
> 
>   Ah, ah, la technique habituelle des profs quand ça devient
> scabreux : « en exercice », « c???est trivial »???

Ici, ça n'a rien de très scabreux.

>   Je préfère le « vous verrez ça l???année prochaine » :o)

Il y a un précédent bien connu, où la marge n'était pas assez grande :)

Réponse(s) vendredi prochain.
-- 
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]



Re: [SHELL] remplacer un ca ractère dans une sous-chaine

2007-12-28 Thread Jacques L'helgoualc'h
Jacques L'helgoualc'h a écrit, vendredi 21 décembre 2007, à 19:22 :
> Sylvain Sauvage a écrit, vendredi 21 décembre 2007, à 10:31 :
[...]
> > >  3/ Recoller les morceaux... (en exercice :)
> > 
> >   Ah, ah, la technique habituelle des profs quand ça devient
> > scabreux : « en exercice », « c???est trivial »???
> 
> Ici, ça n'a rien de très scabreux.
> 
> >   Je préfère le « vous verrez ça l???année prochaine » :o)
> 
> Il y a un précédent bien connu, où la marge n'était pas assez grande :)
> 
> Réponse(s) vendredi prochain.

Exercice : mettre en majuscules et double espacement le texte entre
crochets précédés de « Cap » ou « Maj ».


Une solution :

sed -re 's/\b(Maj|Cap)\[([^][]+)\]/\1BALISE_debut\n\2\nBALISE_fin\n/g' 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]