Как удалить строку шаблона и N строк после него? - PullRequest
0 голосов
/ 27 октября 2019

Я пишу сценарий оболочки, который редактирует файл docker-compose.yml (работает на MacOS).

Я пытаюсь удалить блок, который выглядит так и находится в концефайл:

  microservice-itai-ms:
    image: ms-itai-ms:master
    environment:
      NODE_ENV: 'development'
      NPM_TOKEN: 'SECRET'
    ports:
      - "3022:3000"
    depends_on:
      - "redis-cluster"

Я выполняю следующую команду для удаления этого блока:

sed -i.bak '/.*itai-ms.*/,+9d' docker-compose.yml

9 - количество строк, включая строку шаблона.

Когда я запускаю вышеупомянутую команду, я получаю следующую ошибку:

echo docker-compose.yml | sed -e '/.*itai-ms.*/,+9d'
sed: 1: "/.*itai-ms.*/,+9d
": expected context address

Что я делаю не так?

1 Ответ

1 голос
/ 27 октября 2019

Если «itai-ms» действительно не появляется перед блоком, а блок действительно находится в конце файла, вы можете сделать это:

sed -i.bak '/itai-ms/,$d' docker-compose.yml

РЕДАКТИРОВАТЬ:

Грубо говоря, команда имеет значение "от /itai-ms/ до $ [то есть от первой строки, содержащей" itai-ms ", до последней строки файла] execute d [то есть удалить строку] "

И если вы хотите передать" itai-ms "в качестве переменной (назовите ее X), попробуйте это:

"/$X/,\$d"

Обратите внимание на двойные кавычки и экранированные $.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...