我有一个 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 ###############################################################################
现在我想在第 42 行从“#DPS TPM 配置配置”编辑到“#registration_id:“{registration_id}””。所以我使用以下命令:
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 输出,而不是整个文件。任何人都可以帮助命令!
尝试:
此取消注释每行
#
以s/^#//
匹配//,//
.