2013-10-25 31 views
19

Mi chiedo come posso eseguire una ricerca/sostituzione multipla utilizzando un singolo articolo sed in Mac OSX. Sono in grado di farlo in Ubuntu ma a causa della natura BSD di OSX, il comando deve essere leggermente modificato.Sostituzioni multiple con un comando sed

Quindi, dato un file con la stringa:

"Red Blue Red Blue Black Blue Red Blue Red" 

voglio eseguire un'istruzione sed che si traduce in uscita:

"Green Yellow Green Yellow Black Yellow Green Yellow Green" 

miei due affermazioni sed con una qualifica find

color1="Green" 
color2="Yellow" 
find . -type f -exec sed -i '' s/Red/$color1/g {} \; 
find . -type f -exec sed -i '' s/Blue/$color2/g {} \; 

Ho provato diverse combinazioni di punti e virgola e barre e ho cercato a Apple's Dev man page for sed ma con una mancanza di esempi, non riuscivo a metterlo insieme.

+0

Possibile duplicato di [combinazione di 2 comandi sed] (http://stackoverflow.com/questions/7657647/combining-2-sed-commands) – tripleee

risposta

20

La pagina man di Apple dice È possibile specificare più comandi utilizzando le opzioni -e o -f. Quindi direi

find . -type f -exec sed -i '' -e s/Red/$color1/g -e s/Blue/$color2/g {} \; 

Questo funziona sicuramente in Linux e altri sistemi Unix.

+0

Impressionante, grazie. Si scopre che stavo effettivamente uscendo nella directory sbagliata, ma posso confermare che funziona. – user1026361

9

Dovrebbe essere anche possibile combinare sed comandi utilizzando il punto e virgola ;:

find . -type f -exec sed -i '' -e "s/Red/$color1/g; s/Blue/$color2/g" {} \; 

Mi chiedevo come portatili e questo è trovato attraverso this Stackoverflow answer un collegamento a the POSIX specification of sed. Soprattutto se hai un sacco di comandi sed da eseguire, questo mi sembra meno complesso rispetto alla scrittura di più espressioni sed.

Problemi correlati