Modification d'une seule ligne ds un fichier

Fermé
mike - 15 mars 2009 à 12:46
 Mike - 20 mars 2009 à 18:33
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
15 mars 2009 à 13:19
Salut,
sed '/^Un/ {s//One/;s/.*/& FIN/}' fichier.txt
;-))
1
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > mike
15 mars 2009 à 13:44
^= une ligne qui commence par

Voir SED - Les expressions régulières
0
mike > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
15 mars 2009 à 13:47
Merci beaucoup, c'est parfait :) je vais regarder ça tout de suite.
0
mike > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
15 mars 2009 à 23:57
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
16 mars 2009 à 00:05
je viens de voir qu'il suffisait de mettre :

sed -i .....

et ca marche....

merci
0
KuKrApOk59 Messages postés 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 84
17 mars 2009 à 23:00
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
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
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 1364 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 1 juin 2013 243
17 mars 2009 à 23:32
Dis donc, tu nous collerais pas tes devoirs d'informatique a faire par hasard ?
0
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 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 84
17 mars 2009 à 23:36
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
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
17 mars 2009 à 23:44
sed 's/*/ etoile2/2;s/*/etoile1 /'
0
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 mars 2009 à 07:41
[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
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 mars 2009 à 18:53
sed '
:b
s/*/etoile2/2
tz
/\.$/b
N
bb
:z
s/*/etoile1/
'
0
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > Arun
19 mars 2009 à 16:34
 sed '
:b
s/*/etoile2/2
tz
/\.$/{
s/*/etoile3/
b
}
N
bb
:z
s/*/etoile1/
'
0
Mike > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
20 mars 2009 à 18:33
c'est exactement ce que je voulais :)

Merci encore.
0