2011-02-05 3 views
5

Это одно для вас, гуру. Я действительно не знаю достаточно о том, чтобы полностью разобрать это. Он был написан на каком-то стандартном дистрибутиве Linux, и мне нужно его запустить на OSX.нужна помощь портирование команды sed от debian до OSX

COMPILE_FILES=$(sed -nr '/<script type="text\/javascript"/ { s%^.*src="\{\$baseUrl\}/([^"]+)".*$%\1%p }' templates/common/minifiedScripts.tpl) 

Первое, что флаг r не существует в версии sed для ОС. Я думал, что эквивалент -E, поэтому изменил его. Но затем я получаю:

sed: 1: "/<script type="text\/ja ...": bad flag in substitute command: '}' 

Спасибо!

+0

Dangit, я голосовал, чтобы закрыть на неправильный вопрос. Пожалуйста, проигнорируйте мое закрытое голосование по этому вопросу и закройте [другой] (http://stackoverflow.com/questions/4904572/) в качестве дубликата. –

ответ

9

OS X sed не любит, чтобы несколько команд выполнялись вместе с использованием точек с запятой или сгруппированы в фигурные скобки (что необязательно в вашей команде). Попробуйте это:

COMPILE_FILES=$(sed -n -E '/<script type="text\/javascript"/ s%^.*src="\{\$baseUrl\}/([^"]+)".*$%\1%p' templates/common/minifiedScripts.tpl) 

Если у вас есть sed скрипт, который состоит из нескольких команд, вам придется разбить их с помощью -e:

sed -n -E -e '/match/ {' -e 's/foo/bar/' -e 's/baz/qux/' -e 'p' -e '}' 
+0

это сделал! Благодарю. – pocketfullofcheese

0

-r использует расширенное регулярное выражение, и вы используете тот, который не поддерживается версией OSX. Попробуйте MacPorts или Fink - у них есть порты gnu sed. ИЛИ вы можете просто загрузить и скомпилировать исходный код напрямую.

Смежные вопросы