Je me demande comment je peux faire une recherche/remplacement multiple en utilisant une seule déclaration sed
dans Mac OSX
. Je peux le faire dans Ubuntu
mais en raison de la nature BSD
de OSX
, la commande doit être légèrement modifiée.
Donc, étant donné un fichier avec la chaîne:
"Red Blue Red Blue Black Blue Red Blue Red"
Je veux exécuter une instruction sed qui se traduit par la sortie:
"Green Yellow Green Yellow Black Yellow Green Yellow Green"
Mes deux instructions sed avec un find
éligible
color1="Green"
color2="Yellow"
find . -type f -exec sed -i '' s/Red/$color1/g {} \;
find . -type f -exec sed -i '' s/Blue/$color2/g {} \;
J'ai essayé plusieurs combinaisons de points-virgules et de barres obliques, et j'ai regardé page de manuel de développement d'Apple pour sed mais avec un manque d'exemples, je n'ai pas pu le reconstituer.
La page de manuel d'Apple indique plusieurs commandes peuvent être spécifiées en utilisant les options -e ou -f. Donc je dirais
find . -type f -exec sed -i '' -e s/Red/$color1/g -e s/Blue/$color2/g {} \;
Cela fonctionne certainement sous Linux et autres Unices.
Il devrait également être possible de combiner les commandes sed
en utilisant le point-virgule ;
:
find . -type f -exec sed -i '' -e "s/Red/$color1/g; s/Blue/$color2/g" {} \;
Je me demandais comment c'était portable et trouvé via cette réponse Stackoverflow un lien vers la spécification POSIX de sed
. Surtout si vous avez beaucoup de commandes sed à exécuter, cela me semble moins encombré que d'écrire plusieurs expressions sed
.