2012-05-06 6 views
0

'\'を使うべきときは非常に混乱しています。エスケープのためにバックスラッシュ ''を使うべきでないことについて混乱する

は例を検討:

(1)

$ grep -Eh '^(bz|gz|zip)' filenames.txt 

それはBZ、GZ、またはzipのいずれかで始まる結果を一致します。

(2)

$ echo "(555) 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9] [0-9][0-9]$' 

出力:例では(555)123-4567


  1. (1)、なぜそれが(括弧をエスケープするために '\' を必要としません。 )
  2. 例(2)では、エスケープ()に '\'が必要なのはなぜですか?

私はUbuntuディストリビューションを使用しています。

答えて

4

それぞれの例の括弧は、それぞれ異なる意味です。最初の例で

、括弧はグルーピングであり、ファイル名と照合ありません。したがって、bzで始まり、(bzではないファイルが見つかりました。

2番目の例では、かっこはのリテラルで、一致する電話番号に実際に表示されます。

+1

grepの '-E'オプションは実際にエスケープする必要があるものを変更することに注意してください。'(...) 'はリテラルな括弧にマッチし、' \(... \) 'はグループですが、 '-E'は意味が逆になります。 –

+0

@GordonDavisson:それは本当です。 –

関連する問題