je suis en train de faire un script sed, et j'aurais besoin
de macros.
J'ai des sous-expressions qui reviennent souvent, et plutôt
que de truffer mes expressions de
(?[+-]?[0-9/])?
je voudrais écrire plutôt
${rat}
avec quelque part
rat=(?[+-]?[0-9/])?
Une idée ? Générer mon fichier sed à partir d'un autre fichier sed ?
Passer à perl ?
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot=130
il est toujours possible de faire sed "..." plutôt que sed '...' auquel cas, tu peux mettre tes expressions rationnelles sous forme de variables au niveau shell. là ou ça se complique, c'est pour les ... alternative, awk ? awk -v q="'" ' BEGIN { rat="(?[+-]?[0-9/])?" } $0 ~ rat { ...; next } ... '
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
il est toujours possible de faire sed "..." plutôt que sed '...'
auquel cas, tu peux mettre tes expressions rationnelles sous forme
de variables au niveau shell. là ou ça se complique, c'est pour les ...
alternative, awk ?
awk -v q="'" '
BEGIN { rat="(?[+-]?[0-9/])?" }
$0 ~ rat { ...; next }
...
'
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
il est toujours possible de faire sed "..." plutôt que sed '...' auquel cas, tu peux mettre tes expressions rationnelles sous forme de variables au niveau shell. là ou ça se complique, c'est pour les ... alternative, awk ? awk -v q="'" ' BEGIN { rat="(?[+-]?[0-9/])?" } $0 ~ rat { ...; next } ... '
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
Marc Boyer
Cyrille Lefevre <cyrille.lefevre-news% a écrit :
Le 04/05/2010 13:38, Marc Boyer a écrit :
Bonjour,
je suis en train de faire un script sed, et j'aurais besoin de macros.
J'ai des sous-expressions qui reviennent souvent, et plutôt que de truffer mes expressions de (?[+-]?[0-9/])? je voudrais écrire plutôt ${rat} avec quelque part rat=(?[+-]?[0-9/])?
Une idée ? Générer mon fichier sed à partir d'un autre fichier sed ?
il est toujours possible de faire sed "..." plutôt que sed '...' auquel cas, tu peux mettre tes expressions rationnelles sous forme de variables au niveau shell.
Voui, mais mes gros truc sed, j'ai tendance à les mettre dans un fichier. Car après, il sinon, il faut se battre avec $ (fin de ligne sed) et les .
alternative, awk ? awk -v q="'" '
C'est quoi ce q="'" ' ?
BEGIN { rat="(?[+-]?[0-9/])?" } $0 ~ rat { ...; next }
J'ai pensé à awk, mais je ne l'ai jamais utilisé comme ça. En plus, il me faut gawk, pour avoir accès à gensub. Car je fait des substitutions contextuelles, genre s/Delta ([0-9]*)/delay(1)/g Et comme gensub ne modifie pas son argument, mon code devient un truc genre { x = $0 x = gensub( /Delta ([0-9]*)/ , "delay(1)" , "g" ) x = gensub ... ... } Et il me faut reprendre mes expressions régulières, car les conventions ne sont pas les même.
Et surtout, je n'arrive pas à mettre la variable dans l'expression régulière... Soit le fichier test-sub.awk BEGIN { RAT="[0-9]*" } { print "org:" $0 print "RAT=" RAT print gensub( /Delta *(RAT)/ , "delay(1)" , "g") print gensub( /Delta *([0-9]*)/ , "delay(1)" , "g") } Alors, ça me donne % echo "Delta 4" | awk -f test-sub.awk org:Delta 4 RAT=[0-9]* Delta 4 delay(4)
J'en reviens à générer mon fichier sed avec sed...
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Cyrille Lefevre <cyrille.lefevre-news%nospam@laposte.net.invalid> a écrit :
Le 04/05/2010 13:38, Marc Boyer a écrit :
Bonjour,
je suis en train de faire un script sed, et j'aurais besoin
de macros.
J'ai des sous-expressions qui reviennent souvent, et plutôt
que de truffer mes expressions de
(?[+-]?[0-9/])?
je voudrais écrire plutôt
${rat}
avec quelque part
rat=(?[+-]?[0-9/])?
Une idée ? Générer mon fichier sed à partir d'un autre fichier sed ?
il est toujours possible de faire sed "..." plutôt que sed '...'
auquel cas, tu peux mettre tes expressions rationnelles sous forme
de variables au niveau shell.
Voui, mais mes gros truc sed, j'ai tendance à les mettre dans un fichier.
Car après, il sinon, il faut se battre avec $ (fin de ligne sed) et
les .
alternative, awk ?
awk -v q="'" '
C'est quoi ce q="'" ' ?
BEGIN { rat="(?[+-]?[0-9/])?" }
$0 ~ rat { ...; next }
J'ai pensé à awk, mais je ne l'ai jamais utilisé comme ça. En plus, il
me faut gawk, pour avoir accès à gensub. Car je fait des substitutions contextuelles,
genre
s/Delta ([0-9]*)/delay(1)/g
Et comme gensub ne modifie
pas son argument, mon code devient un truc genre
{ x = $0
x = gensub( /Delta ([0-9]*)/ , "delay(\1)" , "g" )
x = gensub ...
...
}
Et il me faut reprendre mes expressions régulières, car les conventions \ ne sont
pas les même.
Et surtout, je n'arrive pas à mettre la variable dans l'expression régulière...
Soit le fichier test-sub.awk
BEGIN { RAT="[0-9]*" }
{ print "org:" $0
print "RAT=" RAT
print gensub( /Delta *(RAT)/ , "delay(\1)" , "g")
print gensub( /Delta *([0-9]*)/ , "delay(\1)" , "g")
}
Alors, ça me donne
% echo "Delta 4" | awk -f test-sub.awk
org:Delta 4
RAT=[0-9]*
Delta 4
delay(4)
J'en reviens à générer mon fichier sed avec sed...
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
je suis en train de faire un script sed, et j'aurais besoin de macros.
J'ai des sous-expressions qui reviennent souvent, et plutôt que de truffer mes expressions de (?[+-]?[0-9/])? je voudrais écrire plutôt ${rat} avec quelque part rat=(?[+-]?[0-9/])?
Une idée ? Générer mon fichier sed à partir d'un autre fichier sed ?
il est toujours possible de faire sed "..." plutôt que sed '...' auquel cas, tu peux mettre tes expressions rationnelles sous forme de variables au niveau shell.
Voui, mais mes gros truc sed, j'ai tendance à les mettre dans un fichier. Car après, il sinon, il faut se battre avec $ (fin de ligne sed) et les .
alternative, awk ? awk -v q="'" '
C'est quoi ce q="'" ' ?
BEGIN { rat="(?[+-]?[0-9/])?" } $0 ~ rat { ...; next }
J'ai pensé à awk, mais je ne l'ai jamais utilisé comme ça. En plus, il me faut gawk, pour avoir accès à gensub. Car je fait des substitutions contextuelles, genre s/Delta ([0-9]*)/delay(1)/g Et comme gensub ne modifie pas son argument, mon code devient un truc genre { x = $0 x = gensub( /Delta ([0-9]*)/ , "delay(1)" , "g" ) x = gensub ... ... } Et il me faut reprendre mes expressions régulières, car les conventions ne sont pas les même.
Et surtout, je n'arrive pas à mettre la variable dans l'expression régulière... Soit le fichier test-sub.awk BEGIN { RAT="[0-9]*" } { print "org:" $0 print "RAT=" RAT print gensub( /Delta *(RAT)/ , "delay(1)" , "g") print gensub( /Delta *([0-9]*)/ , "delay(1)" , "g") } Alors, ça me donne % echo "Delta 4" | awk -f test-sub.awk org:Delta 4 RAT=[0-9]* Delta 4 delay(4)
J'en reviens à générer mon fichier sed avec sed...
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
PS : au besoin, penses à -W re-interval sous gawk : x{1,}
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
une habitude, si j'ai besoin d'une ', j'utilise q plutôt que '"'"', plus lisible, non ? :-)
Voui.
BEGIN { rat="(?[+-]?[0-9/])?" } $0 ~ rat { ...; next }
J'ai pensé à awk, mais je ne l'ai jamais utilisé comme ça. En plus, il me faut gawk, pour avoir accès à gensub. Car je fait des substitutions contextuelles, genre s/Delta ([0-9]*)/delay(1)/g Et comme gensub ne modifie pas son argument, mon code devient un truc genre { x = $0
pas nécessaire...
Oui, mais pour avoir une régularité du code, autant le faire (sinon, le jour où on enlève le premier gensub...)
x = gensub( /Delta ([0-9]*)/ , "delay(1)" , "g" ) x = gensub ... ... } Et il me faut reprendre mes expressions régulières, car les conventions ne sont pas les même.
alors en fait, c'est très simple... si tu es entre /, c'est , si tu es entre ", c'est , simple non ?
OK. C'est ça qui me manquait comme info !
le pb étant que l'on ne peut utiliser les / que pour la recherche et pas pour le remplacement... ce qui oblige effectivement à utiliser une syntaxe différente selon le contexte ! ex.: sub(/./, "x") vs sub(".", "x") le plus simple est presque de tout mettre entre " avec 2
En effet.
Et surtout, je n'arrive pas à mettre la variable dans l'expression régulière... Soit le fichier test-sub.awk BEGIN { RAT="[0-9]*" } { print "org:" $0 print "RAT=" RAT print gensub( /Delta *(RAT)/ , "delay(1)" , "g")
pourquoi tu protèges les blancs ? " *" devrait suffire ?
Oui, en effet.
BEGIN { RAT="[0-9]*" } { delta = "Delta *(" RAT ")"; delay = "delay(1)"
Oui, c'est l'usage des chaines ".." comme pattern que je n'arrivait pas à faire fonctionner (à cause du surement).
J'en reviens à générer mon fichier sed avec sed...
c'est une idée aussi, mais tu dois aussi avoir le pb des vs =>
Heuh, non, pourquoi ? J'écris 'à la shell' s/Gamma *(${rat}) *(${rat})/delay(1,2)/g dans le fichier .sed.pattern et ensuite, un coup de sed 's:${rat}:[0-9/]*:g' pour générer le .sed
PS : au besoin, penses à -W re-interval sous gawk : x{1,}
Oui, intéressant aussi.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Le 05-05-2010, Cyrille Lefevre <cyrille.lefevre-news%nospam@laposte.net.invalid> a écrit :
Le 05/05/2010 10:53, Marc Boyer a écrit :
Cyrille Lefevre<cyrille.lefevre-news%nospam@laposte.net.invalid> a écrit :
Le 04/05/2010 13:38, Marc Boyer a écrit :
Bonjour,
je suis en train de faire un script sed, et j'aurais besoin
de macros.
<snip>
tu aurais un exemple d'entrée et sortie attendue ?
une habitude, si j'ai besoin d'une ', j'utilise q plutôt que '"'"',
plus lisible, non ? :-)
Voui.
BEGIN { rat="(?[+-]?[0-9/])?" }
$0 ~ rat { ...; next }
J'ai pensé à awk, mais je ne l'ai jamais utilisé comme ça. En plus, il
me faut gawk, pour avoir accès à gensub. Car je fait des substitutions contextuelles,
genre
s/Delta ([0-9]*)/delay(1)/g
Et comme gensub ne modifie
pas son argument, mon code devient un truc genre
{ x = $0
pas nécessaire...
Oui, mais pour avoir une régularité du code, autant le faire
(sinon, le jour où on enlève le premier gensub...)
x = gensub( /Delta ([0-9]*)/ , "delay(\1)" , "g" )
x = gensub ...
...
}
Et il me faut reprendre mes expressions régulières, car les conventions \ ne sont
pas les même.
alors en fait, c'est très simple...
si tu es entre /, c'est , si tu es entre ", c'est \, simple non ?
OK. C'est ça qui me manquait comme info !
le pb étant que l'on ne peut utiliser les / que pour la recherche et
pas pour le remplacement... ce qui oblige effectivement à utiliser une
syntaxe différente selon le contexte !
ex.: sub(/./, "x") vs sub("\.", "x")
le plus simple est presque de tout mettre entre " avec 2
En effet.
Et surtout, je n'arrive pas à mettre la variable dans l'expression régulière...
Soit le fichier test-sub.awk
BEGIN { RAT="[0-9]*" }
{ print "org:" $0
print "RAT=" RAT
print gensub( /Delta *(RAT)/ , "delay(\1)" , "g")
pourquoi tu protèges les blancs ? " *" devrait suffire ?
Oui, en effet.
BEGIN { RAT="[0-9]*" }
{ delta = "Delta\ *(" RAT ")"; delay = "delay(\1)"
Oui, c'est l'usage des chaines ".." comme pattern que je
n'arrivait pas à faire fonctionner (à cause du \ surement).
J'en reviens à générer mon fichier sed avec sed...
c'est une idée aussi, mais tu dois aussi avoir le pb des vs => \
Heuh, non, pourquoi ?
J'écris 'à la shell'
s/Gamma *(${rat}) *(${rat})/delay(1,2)/g
dans le fichier .sed.pattern
et ensuite, un coup de
sed 's:${rat}:[0-9/]*:g'
pour générer le .sed
PS : au besoin, penses à -W re-interval sous gawk : x{1,}
Oui, intéressant aussi.
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
une habitude, si j'ai besoin d'une ', j'utilise q plutôt que '"'"', plus lisible, non ? :-)
Voui.
BEGIN { rat="(?[+-]?[0-9/])?" } $0 ~ rat { ...; next }
J'ai pensé à awk, mais je ne l'ai jamais utilisé comme ça. En plus, il me faut gawk, pour avoir accès à gensub. Car je fait des substitutions contextuelles, genre s/Delta ([0-9]*)/delay(1)/g Et comme gensub ne modifie pas son argument, mon code devient un truc genre { x = $0
pas nécessaire...
Oui, mais pour avoir une régularité du code, autant le faire (sinon, le jour où on enlève le premier gensub...)
x = gensub( /Delta ([0-9]*)/ , "delay(1)" , "g" ) x = gensub ... ... } Et il me faut reprendre mes expressions régulières, car les conventions ne sont pas les même.
alors en fait, c'est très simple... si tu es entre /, c'est , si tu es entre ", c'est , simple non ?
OK. C'est ça qui me manquait comme info !
le pb étant que l'on ne peut utiliser les / que pour la recherche et pas pour le remplacement... ce qui oblige effectivement à utiliser une syntaxe différente selon le contexte ! ex.: sub(/./, "x") vs sub(".", "x") le plus simple est presque de tout mettre entre " avec 2
En effet.
Et surtout, je n'arrive pas à mettre la variable dans l'expression régulière... Soit le fichier test-sub.awk BEGIN { RAT="[0-9]*" } { print "org:" $0 print "RAT=" RAT print gensub( /Delta *(RAT)/ , "delay(1)" , "g")
pourquoi tu protèges les blancs ? " *" devrait suffire ?
Oui, en effet.
BEGIN { RAT="[0-9]*" } { delta = "Delta *(" RAT ")"; delay = "delay(1)"
Oui, c'est l'usage des chaines ".." comme pattern que je n'arrivait pas à faire fonctionner (à cause du surement).
J'en reviens à générer mon fichier sed avec sed...
c'est une idée aussi, mais tu dois aussi avoir le pb des vs =>
Heuh, non, pourquoi ? J'écris 'à la shell' s/Gamma *(${rat}) *(${rat})/delay(1,2)/g dans le fichier .sed.pattern et ensuite, un coup de sed 's:${rat}:[0-9/]*:g' pour générer le .sed
PS : au besoin, penses à -W re-interval sous gawk : x{1,}
Oui, intéressant aussi.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0