0 votes

Comment trouver des informations dans un fichier à l'aide d'expressions régulières sous Linux

J'ai un fichier contenant de nombreuses lignes. L'une d'entre elles ressemble à :

set auto_upgrade {1 2 3 4}

La liste peut contenir plus de numéros.

Maintenant, dans un shell script je veux regarder dans ce fichier et trouver quel est le dernier numéro de la liste. Dans l'exemple ci-dessus, il devrait trouver 4. J'ai une expression régulière pour trouver cela :

set auto_upgrade {\([0-9] \)*\([0-9]\{1,\}\)}

Le deuxième groupe contient ce dont j'ai besoin. Cependant, comment puis-je utiliser cette expression régulière ? J'ai essayé sed mais il renvoie le fichier complet avec une substitution. Je veux juste le deuxième groupe.

Merci d'avance, Barth

3voto

soulmerge Points 37314

Tout d'abord, lancez sed en mode silencieux : il ne doit rien imprimer sauf si on lui demande de le faire (c'est le flag -n ). Ensuite, n'imprimez que si une substitution a été effectuée (c'est le modificateur de motif p )

sed -n 's/set auto_upgrade {\([0-9] \)*\([0-9]\{1,\}\)}/\2/p'

0voto

Brian L Points 6585

Quelque chose comme

cat filename | perl -pe 's/^.* ( \d +)\}/$1/'

devrait fonctionner.

0voto

Steve B. Points 23227
sed 's/.*\([0-9]\+\)}/\1/g'

Le " \1 " dans la section de remplacement correspond au groupe, c'est-à-dire (sans tenir compte des échappatoires et des guillemets)

sed s/pattern1(pattern2)/\1/g

retournera la partie correspondante du motif 2

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