Remplacer ligne dans fichier

Remek -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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 34167 Statut Modérateur 7 885
 
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
Remek
 
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 34167 Statut Modérateur 7 885
 
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
Remek
 
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   Statut Membre Dernière intervention   306
 
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   Statut Modérateur Dernière intervention   4 896
 
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