OVH Cloud OVH Cloud

Utilisation Sed simple

5 réponses
Avatar
Georges
Bonjour,

J'ai besoin d'utiliser le surpuissant sed pour un truc pas compliqué et,
à l'instar du monsieur qui ne veut pas lire les 600 pages de "Je démonte
mon moteur pièce par pièce" pour trouver le paragraphe qui parle de la
jauge d'huile, je m'en remet à une âme charitable pour me souffler la
bonne commande et gagner un temps précieux.

Dans "monfichier.txt" je veux modifier la ligne qui contient
"toto.xxxxx" par "toto.tata" (xxxx représentant n'importe quoi)

Je précise que c'est sed pour DOS.


Merci d'avance.

5 réponses

Avatar
ZebX
Dans "monfichier.txt" je veux modifier la ligne qui contient
"toto.xxxxx" par "toto.tata" (xxxx représentant n'importe quoi)



De mémoire, ca doit ressembler à ca :
sed s/toto.x/tata.y/g

Notes que tr - tr toto.x tata.y - suffit amplement pour ce travail.

--
ZebX - Mécano-boucher

Avatar
Khanh-Dang
Bonjour,


Bonjour,

J'ai besoin d'utiliser le surpuissant sed pour un truc pas compliqué et,
à l'instar du monsieur qui ne veut pas lire les 600 pages de "Je démonte
mon moteur pièce par pièce" pour trouver le paragraphe qui parle de la
jauge d'huile, je m'en remet à une âme charitable pour me souffler la
bonne commande et gagner un temps précieux.


Pourtant, en moins de temps qu'il n'en faut pour écrire ton post, on
peut trouver la solution à ton problème. D'autant plus que la
documentation de sed ne fait pas 600 pages. Elle fait environ 12 écrans
de 24 lignes chez moi. J'avoue par contre qu'il faut comme préalable
connaître les expressions rationnelles, ce qui n'est pas une mince
affaire.

Je me permets cependant de dire que ton analogie avec ton moteur à
démonter « pièce par pièce pour trouver le paragraphe qui parle de la
jauge d'huile » n'est pas valable. En effet, la documentation sur
internet a de bien qu'elle est indexée et te permet, à condition de
savoir utiliser un moteur de recherche, de trouver l'information sur la
jauge d'huile très rapidement. C'est d'ailleurs normalement aussi le cas
pour un manuel, même celui d'un moteur de voiture.

Dans "monfichier.txt" je veux modifier la ligne qui contient
"toto.xxxxx" par "toto.tata" (xxxx représentant n'importe quoi)


Je ne sais pas ce que tu veux faire exactement. Voici une solution qui
permet ce que tu me sembles vouloir faire :
sed -i monfichier.txt 's/toto..*/toto.tata/'


Voici une petite explication, qui t'encouragera, j'espère à lire la
documentation de sed, mais aussi à te renseigner sur les expressions
rationnelles :

La syntaxe sed « s/foo/bar/ » permet de remplacer toutes les occurences
de l'expression rationnelle « foo » par le texte « bar ». A préciser
qu'une expression rationnelle est - pour simplifier - une syntaxe
permettant de reconnaître des motifs de caractères. On a un semblant
d'expression rationnelle avec les motifs du shell DOS : « *.c » en est
un exemple. Attention, « *.c » ne suit en revanche pas la syntaxe des
expressions rationnelles, qui est différente des motifs du DOS (et des
shells sous UNIX) car beaucoup plus générale et plus puissante.

Ici, l'expression rationnelle qui s'applique est « toto..* ».
L'équivalent en syntaxe shell DOS (ou UNIX) serait « toto.* ».


Normalement, ta question n'est pas vraiment en charte sur ce groupe,
mais j'avoue que je sais pas vraiment vers quel groupe placer un
followup, donc je n'en mets pas.

Je précise que c'est sed pour DOS.


Peut-être faut-il modifier la solution que je t'ai donné, car je ne sais
pas s'il y a des différences de fonctionnement dans la version de sed
que tu utilises. Mais je pense que ça devrait marcher.

Merci d'avance.


De rien.

Avatar
Nicolas George
ZebX wrote in message <428b0273$0$22794$:
Notes que tr - tr toto.x tata.y - suffit amplement pour ce travail.


Pas du tout : avec cette commande, _tous_ les x du document sont remplacés
par des y.

Avatar
ZebX

Pas du tout : avec cette commande, _tous_ les x du document sont remplacés
par des y.
Oups. Autant pour moi.


--
ZebX - Mécano-boucher

Avatar
Georges

Pourtant, en moins de temps qu'il n'en faut pour écrire ton post, on
peut trouver la solution à ton problème. D'autant plus que la
documentation de sed ne fait pas 600 pages. Elle fait environ 12 écrans
de 24 lignes chez moi. J'avoue par contre qu'il faut comme préalable
connaître les expressions rationnelles, ce qui n'est pas une mince
affaire.


Voilà, tu m'ôtes les touches du clavier (les mots de la bouche)

Je me permets cependant de dire que ton analogie avec ton moteur à
démonter « pièce par pièce pour trouver le paragraphe qui parle de la
jauge d'huile » n'est pas valable. En effet, la documentation sur
internet a de bien qu'elle est indexée et te permet, à condition de
savoir utiliser un moteur de recherche, de trouver l'information sur la
jauge d'huile très rapidement. C'est d'ailleurs normalement aussi le cas
pour un manuel, même celui d'un moteur de voiture.


Hélas, quand on manque de la plus élèmentaire des bases (en l'occurence
la connaissance des expressions régulières) et bien on est pas plus
avancé. Je tente une autre comparaison : c'est comme si je demandais :
comment dis-t-on "A quel heure passe le bus 14", en japonais ? Même avec
beaucoup de doc, il me faudrait un temps fou pour dire cette misérable
phrase. Mon bus sera parti depuis longtemps... : )

Dans "monfichier.txt" je veux modifier la ligne qui contient
"toto.xxxxx" par "toto.tata" (xxxx représentant n'importe quoi)



Je ne sais pas ce que tu veux faire exactement. Voici une solution qui
permet ce que tu me sembles vouloir faire :
sed -i monfichier.txt 's/toto..*/toto.tata/'


Moi, c'est sed -i "s/toto.*/toto.tata/g" monfichier.txt qui a fonctionné.
J'ai mis du temps à comprendre qu'il fallait des double-quote (vu que
c'est sed pour windows et que je l'appelle depuis l'invite de commande)

En tout cas, merci d'avoir pris la peine de répondre.