sh / sed для удаления строк из файла для переопределения docker-compose громкости - PullRequest
0 голосов
/ 30 августа 2018

docker-compose позволяет переопределять файлы, однако, если том указан в первом файле, например, volA, а том указан в переопределении volB, конечный результат будет volA и * 1004. *.

Мне нужно написать скрипт для поиска и удаления всех томов в исходном файле docker-compose.

Это docker-compose.yaml:

version: '2'
services:
  first-container:
    image: 'alpine'
    ports:
      - '5000'
    volumes:
      - './volA:/etc/volA'
      - './volB:/etc/volB'
  second-container:
    image: 'alpine'
    ports:
      - '5000'
    volumes:
      - './volC:/etc/volC'
      - './volD:/etc/volD'

Запустите script, чтобы файл docker-compose.yaml стал:

version: '2'
services:
  first-container:
    image: 'alpine'
    ports:
      - '5000'
  second-container:
    image: 'alpine'
    ports:
      - '5000'

Я знаю, что мне придется что-то делать в соответствии с этим, но я не совсем уверен, как.

sed -i '/volume:/d' '' ./docker-compose.yaml

1 Ответ

0 голосов
/ 31 августа 2018

sed для s / old / new, вот и все. Для всего остального используйте awk:

$ awk '$1!="-"{inVol=($1=="volumes:")} !inVol' file
version: '2'
services:
  first-container:
    image: 'alpine'
    ports:
      - '5000'
  second-container:
    image: 'alpine'
    ports:
      - '5000'

Объяснение в соответствии с просьбой в комментариях: Каждый раз, когда строка ввода не начинается с -, мы устанавливаем переменную inVol в 1 (true), если первое поле в строке - volumes: или 0 (false) в противном случае. Затем для каждой строки мы просто проверяем inVol, и если это правда (то есть мы обрабатываем строку, которая началась с volume:, или следующую строку, которая началась с -, до следующей строки, которая не начиналась с -), тогда !inVol ложно, и поэтому мы ничего не делаем, но если inVol ложно (т. Е. Мы не в блоке volume:), тогда !inVol верно, и поэтому мы вызываем действие по умолчанию, данное истинное условие - печать текущей строки.

...