Как добавить блок строки после указанного c слова или строки в файле, используя скрипт bash? - PullRequest
0 голосов
/ 15 января 2020

Это содержимое файла

  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:

Мне нужно добавить следующий блок кода после слова context, который является второй строкой в ​​указанном выше содержимом файла

- context:
       cluster: kubernetes
       namespace: myco-dev
       user: kubernetes-admin
     name: myco/DEV
   - context:
       cluster: kubernetes
        namespace: myco-ua
        user: kubernetes-admin
     name: myco/UA

, так что окончательный вывод должен выглядеть как

contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
- context:
    cluster: kubernetes
    user: kubernetes-admin
    namespace: myco-dev
  name: myco/DEV
- context:
    cluster: kubernetes
    user: kubernetes-admin
    namespace: myco-ua
  name: myco/UA
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}

1 Ответ

0 голосов
/ 15 января 2020

Я не знаю YAML, который, согласно некоторым комментариям, относится к данным этого типа. Предполагая, что данные будут поступать из файлов, скажем, file1 и file2. Мы можем использовать ред. (опять же, я не знаю YAML или откуда поступают данные)

Содержимое файла1 равно

  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:

Содержимое файла2 равно

- context:
       cluster: kubernetes
       namespace: myco-dev
       user: kubernetes-admin
     name: myco/DEV
   - context:
       cluster: kubernetes
        namespace: myco-ua
        user: kubernetes-admin
     name: myco/UA

Вставить содержимое файла file2 в file1 мы делаем.

 printf '%s\n' '2 r file2' w | ed -s file1

Извлечение содержимого файла file1

cat file1

  name: kubernetes
contexts:
- context:
       cluster: kubernetes
       namespace: myco-dev
       user: kubernetes-admin
     name: myco/DEV
   - context:
       cluster: kubernetes
        namespace: myco-ua
        user: kubernetes-admin
     name: myco/UA
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:

Число 2 - это адрес, также известный как номер строки

The afaik читается, что означает чтение файла2

W означает запись.

см.

 man(1p) ed
...