Modification d'une seule ligne ds un fichier

mike -  
 Mike -
Bonjour,

j'aimerais savoir comment faire pour ajouter un mot différent en début et en fin d'une ligne précise dans un fichier.

Exemple de fichier :

Un deux trois
Quatre cinq six
Sept huit neuf

je voudrais remplacer par exemple Un par One en tête de la premiére ligne et ajouter sur cette même ligne FIN à la fin de cette ligne.

Aprés traitement on obtiendrait ainsi :

One deux trois FIN
Quatre cinq six
Sept huit neuf


j'ai essayer en utilisant une syntaxe du style :
cat fichier.txt | while read ligne
do
sed -e 's/Un/one' < fichier.txt
sed -e 's/.*/one & fin' < fichier.txt

done


Le soucis dans cette commande c'est que le fichier est entiérement traité.....
Auriez vous une solution ?
Merci
A voir également:

7 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,
sed '/^Un/ {s//One/;s/.*/& FIN/}' fichier.txt
;-))
1
mike
 
Merci pour cette réponse rapide !
Ca fonctionne parfaitement.
Par contre j'aurais une question, a quoi sert le " ^ " dans /^UN/ ?

Pouriez vous m'expliquer briévement la syntaxe que je ne comprends pas entierement.
0
jipicy Messages postés 41342 Statut Modérateur 4 896 > mike
 
^= une ligne qui commence par

Voir SED - Les expressions régulières
0
mike > jipicy Messages postés 41342 Statut Modérateur
 
Merci beaucoup, c'est parfait :) je vais regarder ça tout de suite.
0
mike > jipicy Messages postés 41342 Statut Modérateur
 
Le remplacement s'effectue trés bien, cependant je me demandais s'il était possible que ce remplacement soit enregistré dans le fichier en question sans qu'on ait besoin de faire ça :

sed '/^T / {s//<title>/;s/.*/&<\/title>/}' fichier.txt > fichier1.txt


En faite, j'aimerais éviter un fichier temporaire.

Merci
0
mike > mike
 
je viens de voir qu'il suffisait de mettre :

sed -i .....

et ca marche....

merci
0
KuKrApOk59 Messages postés 444 Statut Membre 84
 
Voici ce que tu peux faire

fichier de départ
Nibbler:~ KuK$ cat blabla 
Un Deux trois
*quatre cinque six sept*
*deux trois six*
deux un cinq 

J'ai decoupé en 2 sed pour voir lequel fait quoi
Nibbler:~ KuK$ cat blabla | sed -e 's/^*/etoile1 /g' | sed -e 's/*$/ etoile2/g'
Un Deux trois
etoile1 quatre cinque six sept etoile2
etoile1 deux trois six etoile2
deux un cinq 

Le premier sed remplace l''*' en debut de ligne par etoile1, et le suivant remplace le '*' en fin de ligne par etoile2

C'était ce que tu cherchais ?
0
mike
 
Bonsoir,

merci de votre réponse.

Mon fichier d'exmple présente un défaut.
en effet il faut également que lorsque j'ai :

Un Deux trois
*quatre cinque six sept*
*deux trois six*
deux un * cinq trois qutre * cinq


je dois obtenir :

Un Deux trois
etoile1 quatre cinque six sept etoile1
etoile1 deux trois six etoile1
deux un etoile1 cinq trois qutre etoile1 cinq


merci
0
mike
 
et lorsque j'ai

*quatre cinque six sept*
*deux trois six*
*deux un cinq.
*deux trois.
un deux trois * cinq *
un deux trois *cinq six
sept huit * neuf

je dois obtenir :

etoile1 quatre cinque six sept etoile1
etoile1 deux trois six etoile2
*deux un cinq.
*deux trois.
un deux trois etoile1 cinq etoile2
un deux trois etoile1 cinq six
sept huit etoile2 neuf

voilà....

merci
0
synopsis8 Messages postés 1478 Statut Membre 243
 
Dis donc, tu nous collerais pas tes devoirs d'informatique a faire par hasard ?
0
mike
 
Bonsoir,

Je suis entrain de faire un script qui traite certain fichier, qui les indentes et qui met en forme.

J'ai besoin de connaitre tout ces effets pr y parvenir.

merci
0
KuKrApOk59 Messages postés 444 Statut Membre 84
 
Dans ce cas
cat TONFICHIER | sed -e 's/*/etoile1/g'
va suffire ... non ?

C'est le cas le plus simple car il suffit de remplacer * par etoile1
Chez moi j'ai ceci

Nibbler:~ KuK$ cat blabla2
Un Deux trois
*quatre cinque six sept*
*deux trois six*
deux un * cinq trois qutre * cinq 

Nibbler:~ KuK$ cat blabla2 | sed -e 's/*/ etoile1 /g'
Un Deux trois
 etoile1 quatre cinque six sept etoile1 
 etoile1 deux trois six etoile1 
deux un  etoile1  cinq trois qutre  etoile1  cinq 
Ou alors j'ai raté quelquechose

PS : CaYmal de nous faire faire des devoirs ^_^
0
mike
 
le probléme c'est qu'il faut que la premiére étoile soit remplacer par etoile1 et le second par etoile2

avec cette commande tout est remplacer par etoile1
0

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

Posez votre question
jipicy Messages postés 41342 Statut Modérateur 4 896
 
sed 's/*/ etoile2/2;s/*/etoile1 /'
0
mike
 
Bonsoir,

j'ai bien compris cette syntaxe, le pb c'est que lorsque le fichier est comme ceci :

*quatre cinque six sept*
*deux trois six*
*deux un cinq.
*deux trois.
un deux trois * cinq *
un deux trois *cinq six
sept huit * neuf

il faut pas que les étoiles de la ligne 3 et ligne 4 soit modifiés.

etoile1 quatre cinque six sept etoile1
etoile1 deux trois six etoile1
*deux un cinq.
*deux trois.
un deux trois etoile1 cinq etoile2
un deux trois etoile1 cinq six
sept huit etoile2 neuf

on constate que sur ces lignes 3 et lignes 4, à la fin on trouve un point, ne peut on pas jouer sur ça ?
Merci
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
[tmpfs]$ cat plop
*quatre cinq six sept*
*deux trois six*
*deux un cinq.
*deux trois.
un deux trois * cinq *
un deux trois * cinq six
sept huit * neuf

[tmpfs]$ sed '
:b
s/*/etoile2/2
Tz
s/*/etoile1/
b
:z
/\.$/b
N
bb
' plop

etoile1quatre cinq six septetoile2
etoile1deux trois sixetoile2
*deux un cinq.
*deux trois.
un deux trois etoile1 cinq etoile2
un deux trois etoile1 cinq six
sept huit etoile2 neuf

[tmpfs]$
;-))
0
mike
 
Bonjour,
j'ai essayé avec votre commande, j'ai ce message d'erreur sur ma version del linux (Linux 2.4.17acl) :

sed: -e expression #1, char 22: Unknown command: ``T'

comment pourrais-je contourner le probléme ?

Merci
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
sed '
:b
s/*/etoile2/2
tz
/\.$/b
N
bb
:z
s/*/etoile1/
'
0
Arun
 
c'est parfait, ça marche exactement comme ce que je veux :)

sinn, juste pour info, imaginons que je voulais aussi changer
ces deux lignes qu'il y avait en remplacant les * par des etoile3 par exemple
*deux un cinq.
*deux trois.

Merci encore
0
jipicy Messages postés 41342 Statut Modérateur 4 896 > Arun
 
 sed '
:b
s/*/etoile2/2
tz
/\.$/{
s/*/etoile3/
b
}
N
bb
:z
s/*/etoile1/
'
0
Mike > jipicy Messages postés 41342 Statut Modérateur
 
c'est exactement ce que je voulais :)

Merci encore.
0