Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sed ou tr

7 réponses
Avatar
bertrille
J'ai un fichier dont chaque ligne contient 3 virgules. La derniere est
en trop, elle est a la fin de la ligne, juste avant le newline.

Il me semble que l'elimination de cette virgule peut s'aborder de deux
facons:

avec sed en remplacant "virgule newline: par "newline'

avec tr 'virgule virgule virgule' 'virgule virgule NUL'

Je ne suis pas tres confortable avec les caracteres speciaux ou avec
sed

7 réponses

Avatar
manu
Bertrille Ethrington wrote:

J'ai un fichier dont chaque ligne contient 3 virgules. La derniere est
en trop, elle est a la fin de la ligne, juste avant le newline.


Ben sed 's/,$//'

--
Emmanuel Dreyfus


Avatar
Al 1
Emmanuel Dreyfus a écrit:
Bertrille Ethrington wrote:


J'ai un fichier dont chaque ligne contient 3 virgules. La derniere est
en trop, elle est a la fin de la ligne, juste avant le newline.



Ben sed 's/,$//'



ou sed 's/,,,$/,,/' si il y a des lignes correctes...


Avatar
Étienne Labaume
Le Thu, 21 Aug 2003 09:58:53 +0200, Al nous disait:

J'ai un fichier dont chaque ligne contient 3 virgules. La derniere est
en trop, elle est a la fin de la ligne, juste avant le newline.



Ben sed 's/,$//'



ou sed 's/,,,$/,,/' si il y a des lignes correctes...


Euh, si j'ai bien compris, les virgules ne sont pas forcément sensées se
suivre. Donc 's/,$//' est sans doute plus correct.

--
Tinou



Avatar
Christophe Le Gal
Est-ce que le sens de $ est newline?


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")

--
Christophe Le Gal

Avatar
bertrille
Christophe Le Gal wrote in message news:...
Est-ce que le sens de $ est newline?


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!


Avatar
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

Avatar
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