Remplacer la première occurence

Le
BOUDOU Joseph
Salut,

Bon, le travail est déjà fini, mais j'aurais bien aimé trouver une
solution plus rapide. Il s'agissait d'ajouter un pseudo-serveur au Path
de tous les messages d'un spool (des centaines de milliers de
messages). Le truc c'est qu'il est inutile et coûteux de continuer à
parser lorsqu'on a déjà fait la substitution. Mais je n'ai pas trouvé
le moyen de ne pas le faire. Je ne retrouve pas la commande que j'ai
finalement lancée, mais ça devait être quelque chose comme :

find spool -type f -exec sed -i 's/^Path: /1truc.muche!/' '{}' ;

--
BOUDOU Joseph <jogo@matabio.net>
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DeVice
Le #22650791
BOUDOU Joseph a écrit :
Salut,

Bon, le travail est déjà fini, mais j'aurais bien aimé trouver une
solution plus rapide. Il s'agissait d'ajouter un pseudo-serveur au Path
de tous les messages d'un spool (des centaines de milliers de
messages). Le truc c'est qu'il est inutile et coûteux de continuer à
parser lorsqu'on a déjà fait la substitution. Mais je n'ai pas trouvé
le moyen de ne pas le faire. Je ne retrouve pas la commande que j'ai
finalement lancée, mais ça devait être quelque chose comme :

find spool -type f -exec sed -i 's/^Path: /1truc.muche!/' '{}' ;





avec une boucle et un break :

for file in `find spool -type f`;
do
if grep -l '^Path: ' "$file";
then sed -i 's/^Path: /1truc.muche!/' $file;
break;
fi;
done

Je n'ai pas testé, mais je suis sur que ça ne marche pas tel quel si les
fichiers ont des espaces dans leur nom.

--
/dev/loop
Jacques L'helgoualc'h
Le #22650931
Le 06-10-2010, BOUDOU Joseph
[...] Le truc c'est qu'il est inutile et coûteux de continuer à
parser lorsqu'on a déjà fait la substitution. Mais je n'ai pas trouvé
le moyen de ne pas le faire. Je ne retrouve pas la commande que j'ai
finalement lancée, mais ça devait être quelque chose comme :

find spool -type f -exec sed -i 's/^Path: /1truc.muche!/' '{}' ;



Avec sed et find à la sauce GNU,

find spool -type f -exec
sed -i -e '/^Path: (truc.muche!)?/{s//Path: truc.muche!/;q}' {} +

On peut aussi limiter la substitution aux en-têtes

sed -e '1,/^$/{ <code> }'

--
Jacques L'helgoualc'h
Jacques L'helgoualc'h
Le #22650921
Le 06-10-2010, BOUDOU Joseph
[...] Le truc c'est qu'il est inutile et coûteux de continuer à
parser lorsqu'on a déjà fait la substitution. Mais je n'ai pas trouvé
le moyen de ne pas le faire. Je ne retrouve pas la commande que j'ai
finalement lancée, mais ça devait être quelque chose comme :

find spool -type f -exec sed -i 's/^Path: /1truc.muche!/' '{}' ;



Avec sed et find à la sauce GNU,

find spool -type f -exec
sed -i -re '/^Path: (truc.muche!)?/{s//Path: truc.muche!/;q}' {} +

On peut aussi limiter la substitution aux en-têtes

sed -e '1,/^$/{ <code> }'

--
Jacques L'helgoualc'h
Publicité
Poster une réponse
Anonyme