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 ?
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.
Avec sed, tu peux faire précéder une substitution par le numéro de la ligne :
$ 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 :
$ cat test
foo
foo
foo
foo
$ sed -i '2s/foo/bar/' test
$ cat test
foo
bar
foo
foo
@ 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.
[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
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 ?
Exactement comme Kna te l’a montré :
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.
Impec
Je vais pouvoir rajouter ça à mon script de sauvegarde.
Merci à vous deux.
EDIT :
Ce que je n’avais pas interprété, c’est le “test” comme étant un chemin
Intégré tout ça dans mon script de sauvegarde et ça fonctionne impec.
Merci pour les aides