2011-12-27 42 views
1

隨便找給我:grep並在管道中查找。奇怪的反向

. 
./bla-bla_(11) 
./bla-bla_(1) 
./rename 
./rename~ 

find . | grep "*_([0-9]\{1,2\})"給我空的結果。

find . | grep "([0-9]\{1,2\})_*"給我

./bla-bla_(11) 
./bla-bla_(1) 

但正如你所看到的強調和其他字符出現之前摻進digites。爲什麼它在第二種情況下工作?但不是第一次,我把它們放在正確的順序。

+0

我認爲_是特殊符號,這是原因。 – Yola 2011-12-27 13:38:27

+0

不,'_'不是特別的。正則表達式。 – 2011-12-27 14:26:53

回答

1
([0-9]\{1,2\})_* 

匹配像(11)(1)事情之後零個或多個下劃線。

*_([0-9]\{1,2\}) 

匹配,然後像一個(11)*其次是_。你的意思是

.*_([0-9]\{1,2\}) 

請注意.;正則表達式不是全局模式。

+2

'* _([0-9] \ {1,2 \})'不是有效的正則表達式。 – kev 2011-12-27 13:33:02

+1

@kev:實際上是'grep'。試試'echo'*'| grep'*''。 – 2011-12-27 13:35:16

+0

爲什麼'echo'hello'| grep -o'h **''打印'h'? – kev 2011-12-27 13:46:05

1

正如@kev所說,你的第一個正則表達式是無效的:*是一個量詞,它應該在原子之前。這不是。

正則表達式不是文件格式。您可能需要.*,這意味着「任何字符(.),零次或多次(*)」。