2009-05-28 7 views
0

J'ai un fichier avec beaucoup de lignes dedans. L'un d'eux ressemble à:Comment trouver des informations dans un fichier en utilisant des expressions régulières sous Linux

set auto_upgrade {1 2 3 4} 

La liste peut contenir plus de nombres.

Maintenant, dans un script shell, 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 ceci:

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

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

Merci à l'avance, Barth

Répondre

3

Tout d'abord, commencez sed en mode silencieux: il ne doit pas imprimer quoi que ce soit, à moins que de le faire (c'est le drapeau -n) . Ensuite, imprimez seulement si une substitution a été faite (c'est le modificateur de modèle p)

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

Quelque chose comme

de nom de chat | perl -pe 's/^.* (\ d +) \}/$ 1 /'

devrait fonctionner.

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

Le "\ 1" dans la section de remplacement correspond au groupe. à-dire (sans tenir compte des évasions et des citations)

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

renverra la partie apparié de pattern2

Questions connexes