Opérations sur chaines dans un fichier
medo
-
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,
J'ai un fichier 1 où j'ai par exemple: mot1 mot2 mot3
Je souhaite faire un traitement sur un fichier 2 où je souhaite:
- remplacer mot1 par mot1' dans la chaine: "salut... mot1 ... toto"
- supprimer les lignes qui contiennent: "bonjour... mot2... au revoir" et "bonjour... mot2... coucou"
les chaines entourant mot2 et mot3 peuvent etre differentes.
Avez-vous une idée de comment le faire? j'ai essayé d'utiliser awk ou sed mais j'ai pas su comment !
Merci pour votre aide
J'ai un fichier 1 où j'ai par exemple: mot1 mot2 mot3
Je souhaite faire un traitement sur un fichier 2 où je souhaite:
- remplacer mot1 par mot1' dans la chaine: "salut... mot1 ... toto"
- supprimer les lignes qui contiennent: "bonjour... mot2... au revoir" et "bonjour... mot2... coucou"
les chaines entourant mot2 et mot3 peuvent etre differentes.
Avez-vous une idée de comment le faire? j'ai essayé d'utiliser awk ou sed mais j'ai pas su comment !
Merci pour votre aide
Configuration: Windows XP Firefox 3.5
7 réponses
-
Salut,
Merci de mettre le fichier "AVANT" traitement puis "APRES" traitement , histoire qu'on s'entende bien ;-))
-
Merci pour ta réponse
c'est vrai, c'est pas tres clair
fichier AVANT:
salut... mot1 ... toto
bonjour... mot2... au revoir
bonjour... mot3... coucou"
fichier APRES:
salut... UnAutreMot ... toto
mot1, mot2 et mot3 doivent etre lus d'un autre fichier -
mot1, mot2 et mot3 doivent etre lus d'un autre fichier
Ils sont lus comment ? Séquentiellement ?
Il n'y a que ces mots dans le fichier ?
mot1 est toujours à changer et les 2 autres à effacer ?
-
mot1, mot2 et mot3 sont lus je suppose séquentiellement via awk par exemple, mais si tu as une autre solution, je suis preneur. C'est un 2eme fichier où il y a mo1 mot2 mot3 mot4 .. etc sur une seule ligne ou sur des lignes différentes (je peux choisir)
le 1er mot dans le fichier est toujours à remplacer
la présence d'un mot parmi tous les autres impliquent la suppression de la ligne qui le contient-
Désolé je ne vois pas comment faire, y'a un truc qui m'échappe ;-((
Peut être comme ça :[trash]$ cat plop salut... mot1 ... toto bonjour... mot2... au revoir bonjour... mot3... coucou" [trash]$ cat toto mot1 mot2 mot3 [trash]$ var="$(sed -n '1p' toto)" [trash]$ sed -i.bak '/'"$var"'/!d; s//UnAutreMot/' plop [trash]$ cat plop salut... UnAutreMot ... toto [trash]$
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
merci
ça répond à la moitié du probleme puisque j'ai oublié de préciser que le fichier plop contient d'autres lignes qui doivent rester inchangées.
du coup si j'arrive à utiliser une variable dans la commande sed, le probleme sera résolu, du genre:
for (i=1;i<4;i++)
{
var="$(sed -n 'ip' toto)";
sed -i.bak '/'"$var"'/d;
}
donc, comment remaplcer 1p par ip ? -
-
$ cat plop salut... mot1 ... toto blablabla bonjour... mot2... au revoir blabla bonjour... mot3... coucou" $ cat toto mot1 mot2 mot3 $ while read line;do sed -i "/$line/d" plop;done < <(sed -n '1!p' toto) && > var="$(sed -n '1p' toto)"; sed -i "s/${var}/UnAutreMot/" plop $ cat plop salut... UnAutreMot ... toto blablabla blabla blabla $;-))