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

Fermé
paul - 20 mars 2009 à 18:39
 paul - 21 mars 2009 à 12:04
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
A voir également:

3 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 896
20 mars 2009 à 18:42
Salut,
sed -i.bak 's/~.*//' plop
0
Merci pour votre aide, ça marche nickel :)
0
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
20 mars 2009 à 23:45
[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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896 > paul
21 mars 2009 à 11:35
sed ':z;/^\[/!b;N; /\n$/! bz;/^\[/{s/\(.*\)\(\n$\)/DEBUT\1FIN\2/}'
0
paul > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
21 mars 2009 à 11:47
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
21 mars 2009 à 11:55
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
j'ai essayé le script en elevant les { } et ca marche nickel :) :) :)

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

C'est Génial :)

Merci
0