Использование grep и sed для внесения изменений в файл config.yaml

У меня есть файл config.yaml, который я хочу отредактировать или внести изменения, используя скрипт bash. Итак, я получил команду, использующую grep и sed, которая дает мне желаемые изменения, но проблема в том, что когда я применяю sed, он применяется ко всему файлу, включая раздел, который я хочу редактировать. Ниже приведен раздел файла перед редактированием:

    ###############################################################################
29  
30  # Manual provisioning configuration
31  # provisioning:
32  #  source: "manual"
33  #  device_connection_string: ""
34  
35  # DPS TPM provisioning configuration
36  # provisioning:
37  #   source: "dps"
38  #   global_endpoint: "https://global.azure-devices-provisioning.net"
39  #   scope_id: "{scope_id}"
40  #   attestation:
41  #     method: "tpm"
42  #     registration_id: "{registration_id}"
43  
44  # DPS symmetric key provisioning configuration
45  # provisioning:
46  #   source: "dps"
47  #   global_endpoint: "https://global.azure-devices-provisioning.net"
48  #   scope_id: "{scope_id}"
49  #   attestation:
50  #     method: "symmetric_key"
51  #     registration_id: "{registration_id}"
52  #     symmetric_key: "{symmetric_key}"
53  
54  ###############################################################################

Теперь я хочу изменить «Конфигурация обеспечения # DPS TPM» на «# registration_id:« {registration_id} »« в строке 42. Поэтому я использую следующая команда:

grep -Pzom 1 "# DPS TPM provisioning configuration(.|\n)*?(?=\n# DPS)" config.yaml | sed 's/^#[ \t]//' config.yaml

, которая дает мне следующий вывод:


Manual provisioning configuration
provisioning:
  source: "manual"
  device_connection_string: ""

DPS TPM provisioning configuration
provisioning:
  source: "dps"
  global_endpoint: "https://global.azure-devices-provisioning.net"
  scope_id: "{scope_id}"
  attestation:
    method: "tpm"
    registration_id: "{registration_id}"

DPS symmetric key provisioning configuration
provisioning:
  source: "dps"
  global_endpoint: "https://global.azure-devices-provisioning.net"
  scope_id: "{scope_id}"
  attestation:
    method: "symmetric_key"
    registration_id: "{registration_id}"
    symmetric_key: "{symmetric_key}"

###############################################################################

Это редактирует необходимую часть, но вместе с этим и весь файл. Я просто хочу применить sed к grep вывод только файла, а не всего файла. Может кто-нибудь помочь с командой, пожалуйста!

2
задан 4 October 2019 в 06:53

1 ответ

попытка:

sed '
    /# DPS TPM provisioning configuration/,/#     registration_id: "{registration_id}"/{s/^#//}
' config.yaml

этот некомментарий каждый строки запускается с # s/^#// в строках, соответствующих диапазонам, указанным в //,//.

1
ответ дан 2 December 2019 в 04:35

Другие вопросы по тегам:

Похожие вопросы: