Opérations sur chaines dans un fichier
medo
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
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
A voir également:
- Erreur lors de l’opération de « splicing » sur le fichier : fichier trop gros
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
7 réponses
Salut,
Merci de mettre le fichier "AVANT" traitement puis "APRES" traitement , histoire qu'on s'entende bien ;-))
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
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 ?
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
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 :
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 ?
ç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
$;-))