J'ai besoin de manipuler des données. Sed me semble répondre à mes
besoins, mais je ne parviens pas à mes fins.
Dans une liste du type :
azeazea:
dfsdfsd,
fsdfsdf,
vxcvxcv,
uiyuiyu:
znpvryh,
je veux que les virgules suivies d'une ligne vide soient effacés (ou
remplacées par autre chose, pour marquer que la liste est fermée).
J'ai testé, en vain, des formules à base de
sed 's/,$\n^$//g' source > resultat
avec, comme variantes, 's/,$\n//g', 's/,\n//g', 's/,\\n//g', etc. Je
n'obtiens rien de concluant.
Inversement, si je pars d'un fichiers contenant des données
présentées :
azeazea:
dfsdfsd
fsdfsdf
vxcvxcv:
uiyuiyu
znpvryh
et si je veux que les fins de lignes soient marquées par une virgule
sauf si on trouve un <:> devant, j'ai
sed 's/[^:]$/&,/g' source > resultat
mais je ne trouve pas comment obtenir la restriction supplémentaire :
« pas de virgule si on trouve une ligne vide après ».
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Stephane Chazelas
On Mon, 24 Oct 2005 03:09:47 +0200, Vincent Ramos wrote:
Bonjour,
J'ai besoin de manipuler des données. Sed me semble répondre à mes besoins, mais je ne parviens pas à mes fins.
Dans une liste du type : azeazea: dfsdfsd, fsdfsdf, vxcvxcv,
uiyuiyu: znpvryh,
je veux que les virgules suivies d'une ligne vide soient effacés (ou remplacées par autre chose, pour marquer que la liste est fermée).
sed -n ' /./!{ x s/,$// x } x 1!p ${g;p;}'
J'ai testé, en vain, des formules à base de sed 's/,$n^$//g' source > resultat
Evidemment, sed opere une ligne a la fois par defaut. Donc, ce que peut matcher /.../ ne contient pas de saut de ligne par definition. Si tu veux que le pattern space contienne un saut de ligne, il faut l'y ajouter:
sed ' /,$/{ N # ajouter la ligne suivante au pattern space s/,n$/ / D }'
-- Stephane
On Mon, 24 Oct 2005 03:09:47 +0200, Vincent Ramos wrote:
Bonjour,
J'ai besoin de manipuler des données. Sed me semble répondre à mes
besoins, mais je ne parviens pas à mes fins.
Dans une liste du type :
azeazea:
dfsdfsd,
fsdfsdf,
vxcvxcv,
uiyuiyu:
znpvryh,
je veux que les virgules suivies d'une ligne vide soient effacés (ou
remplacées par autre chose, pour marquer que la liste est fermée).
sed -n '
/./!{
x
s/,$//
x
}
x
1!p
${g;p;}'
J'ai testé, en vain, des formules à base de
sed 's/,$n^$//g' source > resultat
Evidemment, sed opere une ligne a la fois par defaut. Donc, ce
que peut matcher /.../ ne contient pas de saut de ligne par
definition. Si tu veux que le pattern space contienne un saut de
ligne, il faut l'y ajouter:
sed '
/,$/{
N # ajouter la ligne suivante au pattern space
s/,n$/
/
D
}'
On Mon, 24 Oct 2005 03:09:47 +0200, Vincent Ramos wrote:
Bonjour,
J'ai besoin de manipuler des données. Sed me semble répondre à mes besoins, mais je ne parviens pas à mes fins.
Dans une liste du type : azeazea: dfsdfsd, fsdfsdf, vxcvxcv,
uiyuiyu: znpvryh,
je veux que les virgules suivies d'une ligne vide soient effacés (ou remplacées par autre chose, pour marquer que la liste est fermée).
sed -n ' /./!{ x s/,$// x } x 1!p ${g;p;}'
J'ai testé, en vain, des formules à base de sed 's/,$n^$//g' source > resultat
Evidemment, sed opere une ligne a la fois par defaut. Donc, ce que peut matcher /.../ ne contient pas de saut de ligne par definition. Si tu veux que le pattern space contienne un saut de ligne, il faut l'y ajouter:
sed ' /,$/{ N # ajouter la ligne suivante au pattern space s/,n$/ / D }'
-- Stephane
Vincent Ramos
Stephane Chazelas égrapsen en :
Evidemment, sed opere une ligne a la fois par defaut. Donc, ce que peut matcher /.../ ne contient pas de saut de ligne par definition.
En relisant la page de manuel, je m'en suis rendu compte.
Si tu veux que le pattern space contienne un saut de ligne, il faut l'y ajouter: sed ' /,$/{ N # ajouter la ligne suivante au pattern space s/,n$/ / D }'
Merci.
Stephane Chazelas égrapsen en
<slrndlpb86.ct1.stephane_chazelas@duey.spider.com> :
Evidemment, sed opere une ligne a la fois par defaut. Donc, ce
que peut matcher /.../ ne contient pas de saut de ligne par
definition.
En relisant la page de manuel, je m'en suis rendu compte.
Si tu veux que le pattern space contienne un saut de
ligne, il faut l'y ajouter:
sed '
/,$/{
N # ajouter la ligne suivante au pattern space
s/,n$/
/
D
}'
Evidemment, sed opere une ligne a la fois par defaut. Donc, ce que peut matcher /.../ ne contient pas de saut de ligne par definition.
En relisant la page de manuel, je m'en suis rendu compte.
Si tu veux que le pattern space contienne un saut de ligne, il faut l'y ajouter: sed ' /,$/{ N # ajouter la ligne suivante au pattern space s/,n$/ / D }'