2011-12-27 3 views
1

だけで見つける奇妙な逆転は私を与える:パイプラインでgrepとfindを実行します。

. 
./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を引き締め表示されます。なぜそれが2番目のケースで機能するのですか?私は正しい順序でそれらを配置最初にではない。

+0

私は_特別なシンボルだと思う、それは理由だった。 – Yola

+0

いいえ、 '_'は特別な文字ではありません。正規表現。 –

答えて

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

ゼロ以上アンダースコアが続く(11)または(1)のようなものと一致しました。

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

(11)のようなものが続く_続い*と一致します。あなたが意味するのは

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

です。.に注意してください。正規表現はグロブパターンではありません。

+2

'* _([0-9] \ {1,2 \})'は有効な正規表現ではありません。 – kev

+1

@kev:実際には 'grep'のためです。 'echo '*'を試してみてください。 grep '*' ' –

+0

なぜ 'echo 'hello' | grep -o 'h **' 'print' h'? – kev

1

@kevが言っているように、あなたの最初の正規表現は無効です:*は量子で、その前にアトムが必要です。ここではそうではありません。

正規表現はファイルグロブではありません。 .*は、「任意の文字(.)、0回以上(*)」を意味します。

関連する問題