2017-01-24 4 views
0

Ich habe eine Datei myfile. Ich möchte Linien finden, das Muster folgend enthält:Match String und eine oder mehrere Zahlen mit grep

MyWebsite/1234 

oder allgemeinere

somecharactersstringswhitespaces MyWebSite/987 somecharactersstringswhitespaces

Es kann 1 oder mehr Zahlen nach MyWebsite. Ich habe folgende versucht:

grep ".*MyWebsite[0-9]\{1,\}" myfile 
grep "MyWebsite[0-9]\{1,\}" myfile 
grep MyWebsite"[0-9]\{1,\}" myfile 
grep -E ".*MyWebsite/[0-9]\{1,\}.*" myfile 

Keiner von ihnen arbeitete, auch wenn Intuition und Logik sagt, dass sollte gut sein.

+1

Es gibt seltsame Versionen von 'grep' in einigen Betriebssystemen (besonders in alten). Versuchen Sie 'Grep 'MyWebsite [0-9] [0-9] *" myfile ". Beachten Sie, dass Sie den Begrenzungsquantor nicht verlassen sollten, wenn Sie "-E" verwenden. –

+0

Ah, du hast '/' da, also probier 'grep "MyWebsite/[0-9] [0-9] *" myfile'. oder vielleicht mit '/', einige Ihrer Muster können auch funktionieren. –

Antwort

1

grep 'MyWebsite/[0-9]\+' myfile sollte funktionieren. Bei deinen ersten 3 Regexen hast du die / verpasst und auf der letzten solltest du nicht den { und } entkommen sein, aber ansonsten warst du ziemlich gut. Es ist jedoch prägnanter, + anstelle von {1,} zu verwenden, und die Version von Regex, die Grep standardmäßig verwendet (eine Variante von POSIX BRE), erfordert, dass es maskiert wird.