Не используйте parted, так как он явно не подходит для работы. Чтобы разбить GPT-диск, используйте gdisk
. В качестве альтернативы, если ваша версия fdisk
понимает разделы GPT, вы также можете использовать ее. Просто удалите раздел и создайте новый раздел. Отформатируйте раздел с помощью mkfs.ext4
. Обратите внимание, что это уничтожит все данные, которые вы уже записали на диск.
Я думаю, вы можете захватить пробелы из совпадающей строки, а затем заменить при вставке
sed 's/^\( *\)state: present$/&\n\1use: package_manager/' ansible.yaml
Выход:
# Example 1
- name: Package X Install
package:
name:
- package_1
- package_2
state: present
use: package_manager
# Example 2
- name: Package Y Install
package:
name: package_3
state: present
use: package_manager
# Example 3
- block:
- name: Package Z Install
package:
name: package_4
state: present
use: package_manager
# etc. Further examples would be any combination, iteration of the above.
Использование надлежащего синтаксического анализатора YAML для данных в вопросе,
$ yq -y '(.. |.package? | select(.state == "present")) |= (.use = "package_manager")' file.yml
- name: Package X Install
package:
name:
- package_1
- package_2
state: present
use: package_manager
- name: Package Y Install
package:
name: package_3
state: present
use: package_manager
- block:
- name: Package Z Install
package:
name: package_4
state: present
use: package_manager
При этом используется синтаксический анализатор yq
для добавления пары «ключ+значение» use: package_manager
в каждую секцию package
, содержащую ключ state
, соответствующий значению present
.
Он делает это путем рекурсии по всем данным, выбирая разделы package
, которые имеют ключ state
со значением present
. Затем он добавляет новый ключ и значение в эти разделы.