Fin de ligne. Je pinaille presque, mais si c'etait newline, alors sed s/,$// supprimerait aussi tes newline, et il faudrait plutot ecrire sed s/,$/$/
Et d'ailleurs le $ "matche" aussi les fins de ligne qui ne sont pas suivie d'un newline (derniere ligne d'un fichier par exemple)
$ echo -n 'bla,' | sed 's/,$//' ; echo bla
(sous linux. ie echo -n signifie "pas de newline chariot")
C'est clair, merci!
Stephane CHAZELAS
Le Thu, 21 Aug 2003 22:56:31 GMT, Christophe Le Gal écrivait : [...]
Et d'ailleurs le $ "matche" aussi les fins de ligne qui ne sont pas suivie d'un newline (derniere ligne d'un fichier par exemple)
$ echo -n 'bla,' | sed 's/,$//' ; echo bla
Une ligne est toujours censée se terminer par un n, meme la dernière. Dans le cas contraire, on n'a pas affaire à du texte (au sens où POSIX le définit), les comportements des outils texte sont alors indéfinis. Dans l'exemple que tu donnes ça ne marchera comme tu le décris qu'avec très peu de seds (principalement celui de GNU), la plupart ignorent tout ce qui se trouve après le dernier n, d'autres te rajouteront un n en sortie.
Mais $ ne matche pas un saut de ligne, il matche la fin du "pattern space" ; plus generalement, quel que soit l'outil qui utilise des regexp, la fin de la chaine à comparer à la regexp.
Dans le cas de sed, le pattern space peut contenir un n, $ ne le matchera pas pour autant.
Exemple:
printf 'anbn' | sed 'N; s/a$/b/; s/.b$/a/'
renverra "aa" et pas "ba".
-- Stéphane
Le Thu, 21 Aug 2003 22:56:31 GMT, Christophe Le Gal
<christophe-n2@vinigou.org> écrivait :
[...]
Et d'ailleurs le $ "matche" aussi les fins de ligne qui ne sont pas
suivie d'un newline (derniere ligne d'un fichier par exemple)
$ echo -n 'bla,' | sed 's/,$//' ; echo
bla
Une ligne est toujours censée se terminer par un n, meme la
dernière. Dans le cas contraire, on n'a pas affaire à du texte
(au sens où POSIX le définit), les comportements des outils
texte sont alors indéfinis. Dans l'exemple que tu donnes ça ne
marchera comme tu le décris qu'avec très peu de seds
(principalement celui de GNU), la plupart ignorent tout ce qui
se trouve après le dernier n, d'autres te rajouteront un n en
sortie.
Mais $ ne matche pas un saut de ligne, il matche la fin du
"pattern space" ; plus generalement, quel que soit l'outil qui
utilise des regexp, la fin de la chaine à comparer à la regexp.
Dans le cas de sed, le pattern space peut contenir un n, $ ne
le matchera pas pour autant.
Le Thu, 21 Aug 2003 22:56:31 GMT, Christophe Le Gal écrivait : [...]
Et d'ailleurs le $ "matche" aussi les fins de ligne qui ne sont pas suivie d'un newline (derniere ligne d'un fichier par exemple)
$ echo -n 'bla,' | sed 's/,$//' ; echo bla
Une ligne est toujours censée se terminer par un n, meme la dernière. Dans le cas contraire, on n'a pas affaire à du texte (au sens où POSIX le définit), les comportements des outils texte sont alors indéfinis. Dans l'exemple que tu donnes ça ne marchera comme tu le décris qu'avec très peu de seds (principalement celui de GNU), la plupart ignorent tout ce qui se trouve après le dernier n, d'autres te rajouteront un n en sortie.
Mais $ ne matche pas un saut de ligne, il matche la fin du "pattern space" ; plus generalement, quel que soit l'outil qui utilise des regexp, la fin de la chaine à comparer à la regexp.
Dans le cas de sed, le pattern space peut contenir un n, $ ne le matchera pas pour autant.
Exemple:
printf 'anbn' | sed 'N; s/a$/b/; s/.b$/a/'
renverra "aa" et pas "ba".
-- Stéphane
Christophe Le Gal
$ echo -n 'bla,' | sed 's/,$//' ; echo
Une ligne est toujours censée se terminer par un n, meme la dernière. Dans le cas contraire, on n'a pas affaire à du texte (au sens où POSIX le définit), les comportements des outils texte sont alors indéfinis. Dans l'exemple que tu donnes ça ne marchera comme tu le décris qu'avec très peu de seds (principalement celui de GNU), la plupart ignorent tout ce qui se trouve après le dernier n, d'autres te rajouteront un n en sortie.
Ah ? C'est vrai en effet que les fichiers se terminent normalement toujours par un n. Vi l'ajoute d'autorite s'il n'y est pas (sauf option -b, pour dire que ce n'est pas sense etre du texte)
-- Christophe Le Gal
$ echo -n 'bla,' | sed 's/,$//' ; echo
Une ligne est toujours censée se terminer par un n, meme la
dernière. Dans le cas contraire, on n'a pas affaire à du texte
(au sens où POSIX le définit), les comportements des outils
texte sont alors indéfinis. Dans l'exemple que tu donnes ça ne
marchera comme tu le décris qu'avec très peu de seds
(principalement celui de GNU), la plupart ignorent tout ce qui
se trouve après le dernier n, d'autres te rajouteront un n en
sortie.
Ah ?
C'est vrai en effet que les fichiers se terminent normalement
toujours par un n. Vi l'ajoute d'autorite s'il n'y est pas (sauf
option -b, pour dire que ce n'est pas sense etre du texte)
Une ligne est toujours censée se terminer par un n, meme la dernière. Dans le cas contraire, on n'a pas affaire à du texte (au sens où POSIX le définit), les comportements des outils texte sont alors indéfinis. Dans l'exemple que tu donnes ça ne marchera comme tu le décris qu'avec très peu de seds (principalement celui de GNU), la plupart ignorent tout ce qui se trouve après le dernier n, d'autres te rajouteront un n en sortie.
Ah ? C'est vrai en effet que les fichiers se terminent normalement toujours par un n. Vi l'ajoute d'autorite s'il n'y est pas (sauf option -b, pour dire que ce n'est pas sense etre du texte)