Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Remplacer la première occurence

3 réponses
Avatar
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>

3 réponses

Avatar
DeVice
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
Avatar
Jacques L'helgoualc'h
Le 06-10-2010, BOUDOU Joseph a écrit :
[...] 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
Avatar
Jacques L'helgoualc'h
Le 06-10-2010, BOUDOU Joseph a écrit :
[...] 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