Вставить строку, содержащую косые черты, в определенную строку с помощью sed

#bash #shell #sed

#bash #оболочка #sed

Вопрос:

Я пытаюсь вставить строку, содержащую косые черты, в определенную строку файла.

Строка, которую я хочу вставить в строку 52 файла:

 /*--------------------------------------------------------------
CUSTOM VARS amp; MIXINS
--------------------------------------------------------------*/
@import "custom/custom_vars_mixins";
  

Пытаясь собрать воедино разные ответы на оба вопроса, я пришел к следующему коду:

 sed -i 's#52i
/*--------------------------------------------------------------
CUSTOM VARS amp; MIXINS
--------------------------------------------------------------*/
@import "custom/custom_vars_mixins";#replace#g' ../style.scss
  

Который возвращает следующую ошибку:

 sed: -e expression #1, char 5: unterminated `s' command
  

Кто-нибудь может помочь с синтаксисом?

Комментарии:

1. Вам нужно экранировать новые строки с помощью обратной косой черты.

2. Прочитайте man page ответы на SO вместо того, чтобы собирать вместе .

3. Проблема не имеет ничего общего с косыми чертами, проблема в том, что строка содержит новые строки.

4. Вы решили проблему косых черт, используя # вместо них разделитель.

5. @Barmar Проблема в том, что синтаксис неверен! Пожалуйста, перестаньте оставлять запутанные комментарии. Если вы не уверены: не комментируйте. Если вы понимаете, что комментарий был неправильным: удалите его!

Ответ №1:

Синтаксис, который вы ищете, это:

 sed -i '52i
/*--------------------------------------------------------------
CUSTOM VARS amp; MIXINS
--------------------------------------------------------------*/
@import "custom/custom_vars_mixins";' ../style.scss
  

Комментарии:

1. Спасибо. работает в Linux, но синтаксис для mac os x sed немного отличается. сделал суть для дальнейшего использования: gist.github.com/brnrds/8dfc8423f27f12aa123aa845c2a3a5a7