У меня есть файл 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 вывод только файла, а не всего файла. Может кто-нибудь помочь с командой, пожалуйста!
попытка:
sed '
/# DPS TPM provisioning configuration/,/# registration_id: "{registration_id}"/{s/^#//}
' config.yaml
этот некомментарий каждый строки запускается с #
s/^#//
в строках, соответствующих диапазонам, указанным в //,//
.