Вы должны добавить новую строку в команду sed
(, а затем учесть, как оболочка обрабатывает экранированные символы новой строки):
sed "/^\t\tkarmaServer.start/a\\
\t\t\t\tflags: ['--no-sandbox']" build/unit-test.coffee
Как сказано в руководстве GNU sed
:
a \
text Append text, which has each embedded newline preceded by a backslash.
Это не очень понятно, неформатировано вот так. (При просмотре с помощью команды man
, увы, не особо ясно. )Это говорит вам о том, что формат команды a
включает обратную косую черту, новую строку, а затем аргумент, обозначаемый текстом . Другими словами, все в этой колонке слева.
Как отмечалось в комментариях к вопросу, sed
отличаются тем, как они обрабатывают неправильно сформированные команды. Spinellis sed
выдает ошибку, говоря вам, что у вас есть что-то кроме обязательной обратной косой черты, за которой следует перевод строки:
% sed "/^\t\tkarmaServer.start/a\t\t\t\tflags: ['--no-sandbox']" /dev/null sed: 1: "/^\t\tkarmaServer.start...": extra characters after \ at the end of a command %
Ваш конкретный выбор sed
, по-видимому, просто рассматривает оставшуюся часть строки как аргумент text . Но первая обратная косая черта по-прежнему считается обязательной обратной косой чертой, которая должна следовать за a
. Следовательно, в качестве аргумента text вы получите
t\t\t\tflags: ['--no-sandbox']
Обратите внимание на начальную t
и на одну вкладку меньше, чем вы ожидали.