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

Sed бросает "плохой флаг" в заменяющей команде '

Я хочу запустить простую команду по замене абсолютных путей на относительные внутри файла 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'

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

4b9b3361

Ответ 1

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

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

sed -i '' ...

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

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

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

Ответ 2

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

Ответ 3

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

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