Remplacement avec Awk

Résolu
Bonjour,

J'aimerais faire un remplacement sur 100 lignes de la valeur du parametres vlanId ci-dessous 3 par 6 dans l'objet VLANIF-1

et pour VLANIF-2 le parametre vlanId 30 par 31.


<managedObject class="com:VLANIF" version="" distName="11036/TNL-1/ETHSVC-1/ETHIF-1/VLANIF-1" operation="update">
<p name="vlanId">3</p>
</managedObject>



<managedObject class="com:VLANIF" version="" distName="11036/TNL-1/ETHSVC-1/ETHIF-1/VLANIF-2" operation="update">
<p name="vlanId">30</p>
</managedObject>


merci d'avance.

8 réponses

  1. Contributeur
    hello
    $ awk '/VLANIF-1/ {n=6} /VLANIF-2/ {n=31} /vlanId/ {sub(">[0-9]+<", ">" n "<")} {print}' fichier
    <managedObject class="com:VLANIF" version="" distName="11036/TNL-1/ETHSVC-1/ETHIF-1/VLANIF-1" operation="update">
    <p name="vlanId">6</p>
    </managedObject>

    <managedObject class="com:VLANIF" version="" distName="11036/TNL-1/ETHSVC-1/ETHIF-1/VLANIF-2" operation="update">
    <p name="vlanId">31</p>
    </managedObject>
    1. bonjour Dubcek

      Merci pour ton retour , c'est Parfait.

      Thank you
      1. Bonjour Dubcek,

        pour la regular expression
        ">[0-9]+<"
        que dois je mettre s'il s'agit d'addresse IP a la place d'un nombre entier.

        Cdlt.
        1. Bonjour Dubcek,

          le meme exemple ma je dois remplacé des addresse IP


          <managedObject class="IPIF" distName="10048/TNL-1/IPNO-1/IPIF-1" operation="create" version="16.1">
          <p name="ipMtu">1500</p>
          <p name="interfacePtr">ETHIF-1/VLANIF-1</p>
          <list name="ipAddrList">
          <item>
          <p name="ipAddrIdentifier">1</p>
          <p name="localIpAddr">10.2.1.0</p>
          <p name="localIpPrefixLength">28</p>
          </item>
          </list>
          </managedObject>


          mon exemple::

          awk '/IPIF-1/ {n="1.0.0.0"} /localIpAddr/ {sub(">[0-9].[0-9].[0-9].[0-9]+<", ">" n "<")} {print}'  fichier


          et je n'obtient pas de changement.

          merci pour ton support.

          BR
          1. Contributeur
            essayer
            $ awk '/IPIF-1/ {n="1.0.0.0"} /localIpAddr/ {sub(">[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+<", ">" n "<")} {print}'  fichier
        2. Hello Dubcek,

          Stp et dans le cas ou j'ai plusieurs IP a modifier dans le même object IPIF-1 comment dois-je procéder. voir l'exemple


          awk '/IPIF-1/ {n="1.0.0.0"} {n="1.0.0.2"} /localIpAddr/ {sub(">[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+<", ">" n "<")} {print}' fichier



          <managedObject class="IPIF" distName="10048/TNL-1/IPNO-1/IPIF-1" operation="create" version="16.1">
          <p name="ipMtu">1500</p>
          <p name="interfacePtr">ETHIF-1/VLANIF-1</p>
          <list name="ipAddrList">
          <item>
          <p name="ipAddrIdentifier">1</p>
          <p name="localIpAddr">10.0.0.0</p>
          <p name="localIpPrefixLength">28</p>
          </item>
          <item>
          <p name="ipAddrIdentifier">1</p>
          <p name="localIpAddr">10.0.0.2</p>
          <p name="localIpPrefixLength">28</p>
          </item>
          </list>
          </managedObject>
          1. Contributeur
            avec un tableau
            $ awk '/IPIF-1/ {n=1; t[1]="1.0.0.0"; t[2]="1.0.0.2"} /localIpAddr/ {sub(">[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+<", ">" t[n++] "<")} {print}'  fichier 
            <managedObject class="IPIF" distName="10048/TNL-1/IPNO-1/IPIF-1" operation="create" version="16.1">
            <p name="ipMtu">1500</p>
            <p name="interfacePtr">ETHIF-1/VLANIF-1</p>
            <list name="ipAddrList">
            <item>
            <p name="ipAddrIdentifier">1</p>
            <p name="localIpAddr">1.0.0.0</p>
            <p name="localIpPrefixLength">28</p>
            </item>
            <item>
            <p name="ipAddrIdentifier">1</p>
            <p name="localIpAddr">1.0.0.2</p>
            <p name="localIpPrefixLength">28</p>
            </item>
            </list>
            </managedObject>
            1. Bnsoir Dubcek,

              c est Parfait!!

              Merci encore une fois pour ton aide.

              Cdlt.