# Modifier une ligne dans un fichier ?

**URL:** <https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104 "2016-02-21T13:30:01Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104/1 "2016-02-21T13:30:01Z")

</div>

Comment faire pour modifier une partie (dernier mot) d’une ligne selon son N° dans un fichier ?  
À la rigueur, remplacer toute la ligne par une autre.  
Ensuite, sauver le fichier avec cette nouvelle donnée ?  
 ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<div class="post-metadata">

**Author:** ![tetrix](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/a4c791/32.png) [@tetrix](https://www.debian-fr.org/u/tetrix)\
**Post date:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104/2 "2016-02-21T13:30:01Z")

</div>

J’éditerais le fichier, je ferais la modif, et avant de sauvegarder #rm l’ancien\_fichier. Après tout dépend de quel fichier il est question, fichier de config, fichier de données (musiques, vidéo, mails). Je ne suis pas sur de bien comprendre ton attente.

---

<div class="post-metadata">

**Author:** ![kna](https://www.debian-fr.org/user_avatar/www.debian-fr.org/kna/32/5623_2.png) [@kna](https://www.debian-fr.org/u/kna)\
**Post date:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104/3 "2016-02-21T13:30:01Z")

</div>

Avec sed, tu peux faire précéder une substitution par le numéro de la ligne :

```auto
$ cat test
foo
foo
foo
foo
$ sed '2s/foo/bar/' test
foo
bar
foo
foo
```

Pour modifier directement le fichier, il faut utiliser l’option -i :

```auto
$ cat test 
foo
foo
foo
foo
$ sed -i '2s/foo/bar/' test
$ cat test
foo
bar
foo
foo
```

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104/4 "2016-02-21T13:30:03Z")

</div>

@ Tetrix :  
C’est en gros ce que je fais mais je voudrais placer ça dans un script déjà existant donc, c’est la ligne de commande qui m’intéresse.  
Je peux aussi faire : deux fichier différents avec les deux modifs possibles et avec deux lignes, je modifie le bon fichier mais il me semble que ça ne fait pas très propre.

@ Kna :  
il me semble que ça répond à ce que je propose en second : modifier la ligne entière, ce qui est déjà pas mal.  
Je vais tester ça.  
 ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104/5 "2016-02-21T13:30:03Z")

</div>

[quote=“ricardo”]@ Kna :  
il me semble que ça répond à ce que je propose en second : modifier la ligne entière, ce qui est déjà pas mal.[/quote]  
En fait ça fait ce que tu veux (ligne entière ou seulement une portion de la ligne selon l’expression régulière que tu mets dans sed) :

`$ sed '2s@world@ricardo@' <<EOF
foo world
hello world
bar world
EOF
foo world
hello ricardo
bar world`  
😉

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104/6 "2016-02-21T13:30:04Z")

</div>

Bon, je crois comprendre mais je ne sais pas où placer le chemin du fichier ?  
Admettons :  
/home/ricardo/truc/fichier

dans ‘fichier’, ligne 26 =  
ricardo est gentil  
cette ligne doit être remplacée par :  
ricardo est très gentil

Comment écrire la ligne sed complète ?

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104/7 "2016-02-21T13:30:04Z")

</div>

> [@ricardo](#):
>
> je ne sais pas où placer le chemin du fichier ?

Exactement comme Kna te l’a montré :

```auto
sed -i '26s@gentil@très gentil@' /chemin/vers/fichier
```

(te focalise pas sur les séparateurs / ou @, le @ c’est une habitude personnelle car je trouve ça plus lisible qu’un / 😉)

D’ailleurs au passage merci Kna, je savais pas qu’on pouvait spécifier une ligne comme ça dans sed ; je me coucherai moins con ce soir grâce à toi. ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104/8 "2016-02-21T13:30:04Z")

</div>

Impec ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")  
Je vais pouvoir rajouter ça à mon script de sauvegarde.  
Merci à vous deux.

EDIT :  
Ce que je n’avais pas interprété, c’est le «&nbsp;test&nbsp;» comme étant un chemin 😒

> [@](#):
>
> $ sed -i ‹&nbsp;2s/foo/bar/&nbsp;› test

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 1:30 UTC](https://www.debian-fr.org/t/modifier-une-ligne-dans-un-fichier/55104/9 "2016-02-21T13:30:14Z")

</div>

Intégré tout ça dans mon script de sauvegarde et ça fonctionne impec.  
Merci pour les aides ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")
