Изменить строки в файле между двумя совпадающими строками, используя sed или awk в bash - PullRequest
0 голосов
/ 09 апреля 2020

В bash как изменить строки в yaml между двумя совпадающими строками, используя awk или sed?

Например, я хочу изменить строки между bbb и ddd,

aaa:
  bbb:
  - c1
  - c2
  - c3
  ddd: 111

должно стать,

aaa:
  bbb: ["c1","c2","c3"]
  ddd: 111

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

Отказ от ответственности: Regex не подходит для масштабируемых решений структурированных данных. Пожалуйста, используйте выделенный YAML-парсер , если это возможно Разбор YAML

0 голосов
/ 10 апреля 2020

Это может работать для вас (GNU sed):

sed -E '/^\s*bbb:/{:a;N;/^\s*ddd:/M!ba;s/^\s*-\s*//mg;s/\n/","/g;s/",(.*),"/ [\1]\n/}' file

Соберите строки между bbb: и ddd:.

Удалите лишние пробелы и - символы на начала или строки.

Заменить символы новой строки на ",".

Заменить первое ", на [ и последнее ," на ]\n.

0 голосов
/ 09 апреля 2020

Что-то вроде

sed -e '/bbb:/,/ddd:/c\  bbb: ["c1","c2","c3"]\n  ddd: 111' myfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...