質問: test.txt aaa/bbb/ccc(/|$) aaa/bbb/ddd(/|$) aaa/bbb/eee(/|$) grep -E -v -f でパターンファイルに記載されている文字列にマッチしないものを探すという条件で書いています。 オプション-Eを使ってパターンファイルの行ごとの終端に(/|$)をつけて拡張正規表現?というものを調べて使ってみたのですが、(/|$)が何をしているかがよくわからないので教えてくださるとうれしいです。 ※パターンファイルに指定したディレクトリ以下のサブディレクトリ・ファイルを除外する目的で使っています。
回答: ググれば答えはすぐ分かると思いますが、一応。 `()`はグルーピングです。 `/`はただのファイルデリミタです。 `|`は算術演算でいうorです。 `$`は文字列の終端を意味するメタ文字です。 つまり、`aaa/bbb/ccc(/|$)`は`aaa/bbb/ccc`という文字列の後に`/`が続く、もしくはそこで終わる場合にマッチします。 以下の例にはマッチします * /aaa/bbb/ccc/ddd * /aaa/bbb/ccc/ * aaa/bbb/ccc/ddd * aaa/bbb/ccc * aaaaa/bbb/ccc 以下の例にはマッチしません * aaa/bbb/ccc.c * aaa/bbb/ccccc