Mmmh, j'ai compris que tu voulais :
1. partir d'un fichier fic1 contenant 3 mots séparés par un espace (mot1, mot2 et mot3)
2. modifier un fichier fic2 dans lequel :
2.1. toute occurrence de mot1 est remplacée par UnAutreMot
2.2. toute ligne comportant mot2 est supprimée
2.3. toute ligne comportant mot3 est supprimée
Si j'ai bon, et que tu veux le faire en une seule commande, alors tu peux bricoler un truc du style :
1 2 3 4 5 6 7 8 9 10 11 12 13
| $ cat motcle
mot1 mot2 mot3
$ cat test
salut... mot1 ... toto
bonjour... mot2... au revoir
mot1 ... salut ... toto
bonjour... mot3... coucou
salut... mot1 ... toto ... mot2
salut... ... toto
$ sed 's/'`cut -d' ' -f1 motcle`'/UnAutreMot/;/'`cut -d' ' -f2 motcle`'/d;/'`cut -d' ' -f3 motcle`'/d' test
salut... UnAutreMot ... toto
UnAutreMot ... salut ... toto
salut... ... toto |
Y'a peut-être plus propre
Explications (si besoin ?):
1. une commande sed :
sed 's/'`cut -d' ' -f1 motcle`'/UnAutreMot/g;/'`cut -d' ' -f2 motcle`'/d;/'`cut -d' ' -f3 motcle`'/d' test
2. dans cette commande, 3 opérations séparées par des points-virgules :
s/'`cut -d' ' -f1 motcle`'/UnAutreMot/g;/'`cut -d' ' -f2 motcle`'/d;/'`cut -d' ' -f3 motcle`'/d
2.1. première commande: remplacer les occurrences du premier mot du fichier :
1 2 3
| s/' > s/x/y/g => remplace (s) toutes (g) les occurrences du motif x par le motif y
`cut -d' ' -f1 motcle` > coupe le premier champ (-f1) du fichier motcle en utilisant l'espace comme séparateur (-d' ') : motif à remplacer
'/UnAutreMot/g > motif remplaçant le précédent |
2.3. deuxième et troisième commande sont similaires: supprimer les lignes comportant un mot particulier :
1 2 3
| /' > /x/d => supprime (d) les lignes comportant le motif x
`cut -d' ' -f2 motcle` > idem que 2.1. sauf qu'on prend le second champ (-f2) : motif identifiant les lignes à supprimer
'/d > indique qu'on veut supprimer la ligne |
les ' sont là pour encadrer la commande sed, mais il faut aussi les intercaler entre les commandes entourées de `...`
`...` permet d'utiliser une commande dans une autre, ici, ces commandes récupèrent chaque mot de ton premier fichier pour l'isoler.
Bien sur, la même chose serait possible en plus lisible avec un script: commencer par récupérer la liste de mots dans des variables avec cut ou awk ou autre, puis faire la commande sed avec ces variables, ce qui est plus facile à lire !
Sinon, tu peux aussi le faire assez simplement en Perl...
Partager