2010-08-26 13 views
2

J'ai une phrase que je veux écrire une commande shell grep à partir d'un texte: La phrase est:commande shell: besoin d'aide d'un match de regex

self.timeout=2.0 

Cependant, comme cela fait partie du code d'un fichier. il cette phrase pourrait également être

self.timeout = 2.0 

ou

self.timeout =2.0 

ou

self.timeout = 8.0 

qui est: il peut y avoir des blancs en plus "=", et la valeur de self.timeout peut-être différent.

Alors quelqu'un pourrait-il m'aider à me donner une commande regex in shell. Quoi qu'il en soit , je sais la coquille:

grep "self.timeout*=" 

œuvres. Mais je pense que ce n'est pas une bonne regex dans la commande shell.

Merci beaucoup!

Répondre

4

Je ferais:

grep -E 'self\.timeout[ \t]*=[ \t]*[0-9.]+' 

Note:

 |  |   | |   
    use egrep |   | zero or more 
      | whitespace 
      | 
    make sure we're matching 
    a dot instead of 
     "any character"  
+0

slebetman, merci beaucoup! Oui, cette regex fonctionne. Ton regex est beaucoup plus formelle que la mienne! Merci! – zhaojing

+0

Bonne prise sur le '\ .' –

+0

slebetman, merci beaucoup pour votre note détaillée. Ça me fait beaucoup mieux comprendre ton regex. J'ai trouvé que stackoverflow est vraiment un bon site! – zhaojing

2

En utilisant grep -E alias egrep vous pouvez utiliser une expression régulière, avec laquelle l'opérateur * correspondra à 0 ou plus du caractère précédent :

egrep 'self\.timeout *=' 

Ou utilisez [[:space:]] pour correspondre à tous les caractères espace:

egrep 'self\.timeout[[:space:]]*=' 
+0

John, merci beaucoup pour vos réponses toujours rapides. L'opérateur * correspond à 0 ou plus du caractère précédent. Oui, en fait, c'est la réponse que je veux! Je me souviens * peut résoudre le problème, mais je ne me souviens pas clairement. Merci beaucoup! Et merci beaucoup pour votre deuxième méthode! – zhaojing