Remplacer ligne dans fichier

Fermé
Remek - 15 nov. 2009 à 01:31
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 15 nov. 2009 à 08:44
Bonjour a tous,

j'ai une multitude de fichiers dont j'aimerais remplacer certaines lignes de maniere simple. Pour etre plus clair, disons que dans mes fichiers j'ai plusieurs fois la ligne suivante:

1 2 3 4 5 ! liste des composants

et je souhaiterais remplacer chaque occurence par:

6 7 8 9 ! liste des composants

J'ai essaye avec SED et je me suis pas mal casse la tete, mais en vain...

Quelqu'un aurait-il une solution ?

Un grand merci d'avance !

Remek
A voir également:

6 réponses

mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 782
15 nov. 2009 à 01:37
Ben pourtant c'est sed qui est le plus adapté à ton besoin. Un truc du genre :

(mando@aldur) (~) $ cat plop.txt
1 2 3 4 5 bzbadbda vavaava
1 2 3 4 5 bzbadbda vavaava
1 2 3 4 5 bzbadbda vavaava
1 2 3 4 5 bzbadbda vavaava
1 2 3 4 5 bzbadbda vavaava
1 2 3 4 5 bzbadbda vavaava

(mando@aldur) (~) $ sed -i 's/1 2 3 4 5/6 7 8/g' plop.txt

(mando@aldur) (~) $ cat plop.txt
6 7 8 bzbadbda vavaava
6 7 8 bzbadbda vavaava
6 7 8 bzbadbda vavaava
6 7 8 bzbadbda vavaava
6 7 8 bzbadbda vavaava
6 7 8 bzbadbda vavaava


Ensuite il suffit d'appliquer ton sed au bons fichiers et c'est plié.

Bonne chance
0
Oui j'avais effectivement pense a faire ca, mais le probleme c'est que je n'ai jamais la meme liste de chiffres. Y-a-t'il un moyen de dire a SED de remplacer uniquement les lignes contenant "bzbadbda vavaava" dans ton exemple?

Merci pour le coup de pouce !
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 782
15 nov. 2009 à 01:48
Bah sed supporte les expressions régulières, donc après tu peux tout à fait généraliser le "1 2 3 4 5" en conséquence. Si tu me donnais un exemple d'un fichier et du résultat que tu souhaites obtenir, ce serait sans doute plus clair pour moi.

Bonne chance
0
En gros pour etre plus clair, j'aimerais dire a SED de scanner mes fichiers et de remplacer toutes les lignes qui contiennent l'expression "liste des composants" par quelque chose d'autre.

Par exemple, si mon fichier est :

3 76 5 2 6 ! liste des composants
f g u e
ffh
23 65 87 ! liste des composants
dgfhhd
gh
48763 3456 ! liste des composants

j'aimerais pouvoir obtenir :

1 2 3 4 ! liste des composants
f g u e
ffh
1 2 3 4 ! liste des composants
dgfhhd
gh
1 2 3 4 ! liste des composants

Un grand merci encore !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 306
15 nov. 2009 à 03:39
Bonjour,
En fait, tu peux utiliser les expressions régulières.
Tu as dans ton cas des lignes commençant par un chiffre, avec éventuellement un deuxième chiffre collé, puis un ou des espaces et d'autres chiffres , la séquence se terminant par !.
Ce serait quelque chose comme :
[0-9]*! liste des composants
donc avec sed : tu mettras comme argument
"/[0-9]*! liste des composants/1 2 3 4 ! liste des composants/g"

Donc quelque chose comme :
cat monfichier | sed -e "s/^[0-9]*! liste /1 2 3 4 ! liste/g" > monnouveaufichier

Est-ce que cela résoud ton problème ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
15 nov. 2009 à 08:44
Salut,

[tmpfs]$ cat plop
3 76 5 2 6 ! liste des composants
f g u e
ffh
23 65 87 ! liste des composants
dgfhhd
gh
48763 3456 ! liste des composants

[tmpfs]$ sed -i.bak 's/.*\(! .*\)/1 2 3 4\1/' plop

[tmpfs]$ cat plop
1 2 3 4! liste des composants
f g u e
ffh
1 2 3 4! liste des composants
dgfhhd
gh
1 2 3 4! liste des composants

[tmpfs]$

;-))
0