3 votes

Recherche et remplacement avec incrément dans vim

J'ai un fichier json qui se présente comme suit :

{
        "pk": 1,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },
   {
        "pk": 1,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },
   {
        "pk": 1,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },

etc....

Je voudrais rechercher et remplacer "pk" : 1 et incrémenter la valeur. Ainsi, mon fichier ressemblerait à :

{
        "pk": 1,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },
   {
        "pk": 2,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },
   {
        "pk": 3,
        "model": "model.Model",
        "fields": {
         "data1": "example",
         "data2": "example"
      }
    },
Jusqu'à présent, j'ai essayé :

let i=1 | g/"pk" : 1/s//="pk" : .i./ | let i=i+1

pour rechercher le motif "pk" : 1 et le remplacer en utilisant un compteur, mais j'ai une erreur de syntaxe quelque part et je me heurte à un mur de briques.

Toute aide ou suggestion serait très appréciée, merci.

4voto

user2571881 Points 1787

Vous pouvez essayer :

:let i=1 | g/"pk": \zs\d\+/ s//\=i/ | let i+=1

 \zs .............. start pattern

Pour réparer votre tentative, faites :

:let i=1 | g/"pk": 1/s//\='"pk": ' .i/ | let i=i+1

Comme vous pouvez le voir, la première erreur était une barre oblique inverse manquante dans la partie de substitution. \= . La deuxième consistait à utiliser une deuxième concaténation à la fin . ce qui ferait que vim essaierait de concaténer la variable avec rien. La troisième était d'oublier de mettre le "pk": entre "guillemets simples", sinon vous vous retrouveriez avec pk sans guillemets. Rappelez-vous que nous concaténons ici une chaîne de caractères avec un nombre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X