Подтвердить что ты не робот

Множественные замены с помощью команды sed

Мне интересно, как я могу выполнить множественный поиск/замену, используя один sed statment в Mac OSX. Я могу сделать это в Ubuntu, но из-за BSD характера OSX, команда должна быть слегка изменена.

Итак, учитывая файл со строкой:

"Red Blue Red Blue Black Blue Red Blue Red"

Я хочу запустить инструкцию sed, которая выводит результат:

"Green Yellow Green Yellow Black Yellow Green Yellow Green"

Два моих оператора sed с квалификационным 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 {} \;  

Я попробовал несколько комбинаций точек с запятой и слэшами и посмотрел на страница разработчика Apple Dev для sed, но с отсутствием примеров, я не мог собрать его вместе.

4b9b3361

Ответ 1

Apple man page says Несколько команд могут быть указаны с помощью опций -e или -f. Поэтому я бы сказал,

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

Это, безусловно, работает в Linux и других Unices.

Ответ 2

Также можно объединить команды sed с помощью точки с запятой ;:

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

Мне было интересно, как это переноситься и найти через fooobar.com/info/276303/... ссылку на Спецификация POSIX sed. Особенно, если у вас много команд sed для запуска, это кажется мне менее суматоху, чем писать несколько выражений sed.