Remplacer ligne dans fichier
Remek
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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
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
Configuration: Windows Vista Firefox 3.5.5
6 réponses
-
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 -
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 ! -
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 -
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 ! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 ?
-
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]$
;-))