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
A voir également:
- Remplacer ligne dans fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
6 réponses
Ben pourtant c'est sed qui est le plus adapté à ton besoin. Un truc du genre :
Ensuite il suffit d'appliquer ton sed au bons fichiers et c'est plié.
Bonne chance
(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 !
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
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 !
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 ?
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]$
;-))