Выбор ответа Middle grep, sed, awk, find, xargs обновлено

sed -i на macOS

Вопрос

Скрипт с sed -i 's/old/new/' app.conf работает в Linux, но на macOS падает с ошибкой invalid command code. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В BSD sed -i требует суффикс: нужно sed -i ''. GNU sed принимает -i с необязательным суффиксом, приклеенным к флагу (-i.bak).

Варианты ответа

  1. На macOS нет sed, команда вызывает другую утилиту
  2. macOS требует флаг sed -E для любых замен
  3. На macOS -i запрещён для файлов в домашнем каталоге
  4. В BSD sed -i требует суффикс: нужно sed -i ''правильный ответ

Разбор

GNU sed принимает -i с необязательным суффиксом, приклеенным к флагу (-i.bak). BSD sed на macOS ждёт суффикс отдельным аргументом, поэтому выражение принимается за суффикс, а имя файла за команду. Переносимо: sed -i.bak 's/old/new/' app.conf && rm app.conf.bak или GNU sed из Homebrew. -E включает расширенные регулярки и к этому отношения не имеет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.