Suprimer tout ce qu'il y a aprés un mot

paul -  
 paul -
Bonjour,

J'aimerais écrire un script permettant de supprimer tout ce qu'il y a aprés un mot.
exemple de fichier à traiter :

janvier février mars avril mai ~date
lundi mardi mercredi
un deux trois~compte

mercredi jeudi vendredi
trois six neuf
~a tester prochainement
lundi mardi

ce que ça donne si l'on supprime tout ce qu'il y a aprés le ~ :

janvier février mars avril mail
lundi mardi mercredi
un deux trois

mercredi jeudi vendredi
trois six neuf

lundi mardi

Voilà, je sais que l'on peut faire ça avec la commande sed, mais je n'y arrive pas.

Merci
Configuration: Windows Vista
Internet Explorer 7.0

3 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
 
Salut,
sed -i.bak 's/~.*//' plop
0
paul
 
Merci pour votre aide, ça marche nickel :)
0
paul
 
Bonsoir, j'ai une autre question sur l'utilisation de la commande SED :
supposons que je dispose de ce fichier :

[]janvier février mars avril mail~[]
[]lundi mardi mercredi~[]
[]un deux trois~[]

mercredi jeudi vendredi
[]trois six neuf
miracle~[]

lundi mardi
[]mercredi jeudi samdi~[]
[]lundi mardi~[]

comment pourrais-je le transformer en :

DEBUT[]janvier février mars avril mail~[]
[]lundi mardi mercredi~[]
[]un deux trois~[] FIN

mercredi jeudi vendredi
DEBUT[]trois six neuf
miracle~[]FIN

lundi mardi
DEBUT[]mercredi jeudi samdi~[]
[]lundi mardi~[]FIN

j'aimerais enfaite ajouter les mot DEBUT et FIN .....
Auriez vous une idée ?
Merci
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
 
[tmpfs]$ cat plop
[]janvier février mars avril mail~[]
[]lundi mardi mercredi~[]
[]un deux trois~[]

mercredi jeudi vendredi
[]trois six neuf
miracle~[]

lundi mardi
[]mercredi jeudi samdi~[]
[]lundi mardi~[]

[tmpfs]$ sed ':z;N; /\n$/! bz;s/^\[.*/DEBUT&/M;s/\n$/FIN&/' plop
DEBUT[]janvier février mars avril mail~[]
[]lundi mardi mercredi~[]
[]un deux trois~[]FIN

mercredi jeudi vendredi
DEBUT[]trois six neuf
miracle~[]FIN

lundi mardi
DEBUT[]mercredi jeudi samdi~[]
[]lundi mardi~[]FIN

[tmpfs]$
;-))
0
paul
 
bonjour,
Merci de me répondre.

j'ai rentré : sed ':z;N; /\n$/! bz;s/^\[.*/DEBUT&/M;s/\n$/FIN&/' fi.txt
j'ai ce message d'erreur :
sed: -e expression #1, char 32: Unknown option to 's'


ensuite j'ai essayé : sed -e ':z;N; /\n$/! bz;s/^\[.*/DEBUT&/M;s/\n$/FIN&/' fi.txt
et j'ai encore ce message d'erreur :
sed: -e expression #1, char 32: Unknown option to 's'

L'option /M n'existe pas sur ma version de linux. En effet quand je test :
sed ':z;N; /\n$/! bz;s/^\[.*/DEBUT&/;s/\n$/FIN&/' fi.txt

j'obtiens :
DEBUT[]janvier février mars avril mail~[]
[]lundi mardi mercredi~[]
[]un deux trois~[]FIN

mercredi jeudi vendredi
[]trois six neuf
miracle~[]FIN

lundi mardi
[]mercredi jeudi samdi~[]
[]lundi mardi~[]FIN


Le mot DEBUT n'est mis qu'une fois normal c'est l'option M qui permet la répétition...
Comment pourais-je contournais le probléme ? ( ma version de linux est Linux 2.4.17acl )

Merci
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > paul
 
sed ':z;/^\[/!b;N; /\n$/! bz;/^\[/{s/\(.*\)\(\n$\)/DEBUT\1FIN\2/}'
0
paul > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
j'ai encore une erreur :(

$ sed ':z;/^\[/!b;N; /\n$/! bz;/^\[/{s/\(.*\)\(\n$\)/DEBUT\1FIN\2/}' fi.txt

sed: -e expression #1, char 60: Unknown option to 's'


merci
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
 
Dans un 1er temps essaie de rajouter un point virgule avant la dernière accolade fermante :
sed ':z;/^\[/!b;N; /\n$/! bz;/^\[/{s/\(.*\)\(\n$\)/DEBUT\1FIN\2/;}'

Sinon essaie le script comme suit :
sed '
:z
/^\[/ !b
N
/\n$/ !b z
/^\[/ {
    s/\(.*\)\(\n$\)/DEBUT\1FIN\2/
}
' fichier
0
paul
 
j'ai essayé le script en elevant les { } et ca marche nickel :) :) :)

Merci beaucoup :)
0
paul
 
Le code marche egalement en ajoutant un point virgule avant la dernière accolade fermante .

C'est Génial :)

Merci
0