2 votes

À l'aide de grep et sed pour apporter des modifications à un fichier config.yaml

J'ai un fichier config.yaml que je veux éditer ou modifier en utilisant un script bash. J'ai donc obtenu une commande à l'aide de grep et sed qui me donne les modifications désirées, mais le problème est que lorsque j'applique sed, cela s'applique à tout le fichier, y compris la section que je veux éditer. Voici la section du fichier avant l'édition :

    ###############################################################################
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}"

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  ###############################################################################

Maintenant, je veux éditer de "# DPS TPM provisioning configuration" à "# registration_id: "{registration_id}"" à la ligne 42. J'utilise donc la commande suivante :

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

qui me donne la sortie suivante :

Configuration de provisioning manuelle
provisioning:
  source: "manuelle"
  device_connection_string: ""

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

Configuration de provisioning par clé symétrique DPS
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}"

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

Cela modifie la partie requise mais en plus de cela, tout le fichier également. Je veux juste appliquer sed à la sortie grep du fichier uniquement et pas à l'ensemble du fichier. Quelqu'un peut-il aider avec la commande s'il vous plaît!

2voto

αғsнιη Points 33236

Essayer:

sed '
    /# Configuration de provisionnement DPS TPM/,/#     registration_id: "{registration_id}"/{s/^#//}
' config.yaml

cela décommente toutes les lignes commençant par # en utilisant s/^#// dans les plages spécifiées dans //,//.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X