2013-07-08 2 views
19

Я хочу, чтобы выполнить простую команду замены абсолютных путей к относительным внутри файла CSS, как это:СЭДА бросает «плохой флаг заменителя команды»

sed -i 's/\/fonts/../fonts/' /Users/sergeybasharov/WebstormProjects/snap/compiled/Content/stylesheets/style.css 

Он бросает этот

sed: 1: "/Users/sergeybasharov/W ...": bad flag in substitute command: 'b' 

Что может быть неправильным в этом простом сценарии?

+0

Там нет 'b' где-нибудь в вашей команде, это не должно быть то, что вы на самом деле набрали. Вставьте фактический скрипт. – Barmar

+0

Да, действительно, просто использовал более короткий эквивалент :). Я обновился до полного варианта. –

+0

Есть некоторая проблема с вашим цитированием, в результате чего имя файла будет включено в подписящую команду, но я не вижу его в том, что вы цитировали. Тем не менее, вы пропускаете обратную косую черту. – Barmar

ответ

35

В вашей команде s/\/fonts/../fonts/ в настоящее время приняты в качестве параметра для -i опции (суффикс, используемый для файла резервной копии), а имя файла аргумент лечится как команды редактирования.

Необходимо указать, чтобы отключить создание резервной копии файла:

sed -i '' ... 

В вашем примере:

sed -i '' 's/\/fonts/../fonts/' /Users/sergeybasharov/WebstormProjects/snap/compiled/Content/stylesheets/style.css 

Компьютеры тупые, они не фигурируют вещи из контекста, чтобы они могли Не скажите, что что-то, начинающееся с s/, равно , очевидно, команда редактирования, а не суффикс.

+0

+1, интересно, в Windows у меня нет этой проблемы, я всегда должен использовать двойные кавычки. – Endoro

+0

@Endoro Тип кавычек не имеет значения в этом случае, важно то, что у вас должен быть явный аргумент. – Barmar

+0

Возможно, в 'OSX' sed, в' GNU' sed '-i' работает без аргумента. Полезно знать :) – Endoro

9

sed -i 's/\/fonts/../fonts/' не является допустимым СЕПГ команды, попробуйте sed -i 's#/fonts#../fonts#'

+1

Правда, но это не вызывает эту конкретную ошибку. – Barmar

+0

Полностью забыл, что вы можете использовать разные разделители в sed. Это решило мою проблему, потому что моя замена содержала слэши. Brilliant! – TryTryAgain

6

У меня была аналогичная проблема. Вы можете установить версию sed на вашем Mac, называемую gsed, и использовать ее с использованием стандартного синтаксиса Linux.

Для этого установите gsed с помощью портов (если у вас его нет, получите его http://www.macports.org/), запустив sudo port install gsed. Затем, вы можете запустить gsed -i 's/old_pattern/new_pattern/г' *

+5

Эквивалент при использовании доморощенного заваривать установку gnu-sed – rich

+1

omg, это спасатель жизни – ling

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