2008-12-17 13 views
4

J'ai plusieurs fichiers contenant cette ligneComment incrémenter un nombre dans plusieurs fichiers si le numéro n'est pas toujours le même?

Release: X 

Je veux incrémenter X dans tous les fichiers.

Si X était constante entre les fichiers, je pourrais avoir une boucle script bash autour des fichiers et de faire (1 $ contenant l'ancien numéro de version et 2 $ la nouvelle, soit 1 $ + 1.):

sed 's/Release: '$1'/Release: '$2'/' <$file >$file.new 

Maintenant, comment faire si le numéro de version est différent entre les fichiers?

Est-ce faisable avec sed?

devrais-je utiliser un autre outil?

Répondre

13

Utilisez awk - c'est exactement le bon outil pour cela:

awk '/Release: [0-9]+/ { printf "Release: %d\n", $2+1 }' < $file > $file.new 

Traduction:

  • Rechercher les lignes contenant "Release:" suivi d'un ou plusieurs chiffres.
  • Imprimer "Release:" suivi d'un nombre et d'une nouvelle ligne. Le numéro est le deuxième mot dans la ligne d'entrée (les chiffres), plus 1.
+0

Merci beaucoup, c'est exactement ce que je cherchais. Je vais maintenant chercher un tutoriel sur awk et en apprendre plus à ce sujet. – Barth

+0

Vous devez également vous assurer de définir un fichier comme "source" principale pour la version. Tous les autres fichiers doivent donc obtenir leur version de cette source unique. –

+0

Salut Aaron, cela est déjà fait :) – Barth

8

Ce doublage perl fera la même chose que le script awk, mais ne détruira pas le reste du fichier ou le reste de les lignes qui contiennent la version.

perl -pe "$_=~s/Release: (\d+)/'Release: '. ($1+1)/e;" <file> file.new 
Questions connexes