私はOSXで使用されている単語をRuby on Railsアプリケーションで検索しており、特定のパターンに一致するディレクトリを除外したいgrep
と思います。
次のコマンドを使用しています。
grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'
コマンドは私が想像したように実行されません。私はこれですアイデア働きます:
- 私- 大文字と小文字を区別しない検索
- N- パターンが見つかった行番号を印刷します。
- 右- 再帰検索
- 勝つ- 完全な言葉が欲しい。つまり、「direct」は一致しますが、「directory」は一致しません。
- - 金利- 拡張正規表現を使用してください。
- 「直接」- 私がマッチングしたい正規表現
- 。- 現在のディレクトリから検索
- --exclude-dir -E 'git|log|アセット'- git、log、またはアセットと一致するディレクトリを除外します。
ディレクトリ除外に関する限り、コマンドは依然として次に終了します。'./git'そして'。 /ログディレクトリだけでなく「./アプリケーション/資産」
私は明らかに基本的な知識が欠けていますが、それが何であるかわかりません。
答え1
そのパターンは次のとおりです。球このパターンではありません。正規表現。 ~によるとinfo
ページ:
--除外-ディレクトリ=GLOB
名前のサフィックスがGLOBパターンと一致するコマンドラインディレクトリはスキップされます。再帰的に検索すると、デフォルト名がGLOBと一致するサブディレクトリはスキップされます。 GLOB の追加の末尾のスラッシュは無視されます。
だから、スイッチを複数回使用するか、あるいは、シェルが中括弧拡張をサポートしている場合は、それを短縮してシェルにパターンリストを拡張させることもできます。たとえば、次のようになります。
grep -inRw -E 'direct' . --exclude-dir={git,log,assets}
名前がgit
、log
およびassets
またはであるディレクトリを除外します。たとえば、次のようになります。
grep -inRw -E 'direct' . --exclude-dir={\*git,asset\*}
git
で終わるか始まるディレクトリ名を除外しますasset
。
シェルは、リストが存在する場合にのみリストを拡張します。中かっこ内には、ディレクトリ名/グローバル変数が複数ある必要があります。。
答え2
--exclude-dir
わからない|
。
--exclude-dir
ただし、除外する各ディレクトリに複数回指定すると、同じ効果が得られます。
grep -inRw -E --exclude-dir 'asset' --exclude-dir 'git' --exclude-dir 'log' 'direct'
答え3
これが私が間違ったことです。--exclude-dir
パス名の代わりにディレクトリ名を入力しました。ディレクトリ名には/
。
以下はうまくいきます:
grep -r --exclude-dir={cache,lib} pattern /home/ /var/
以下は機能しません:
grep -r --exclude-dir={/var/cache,/var/lib} pattern /home/ /var/
答え4
以下を使用してください。
grep -inRw -E 'direct' folder/ --exclude-dir={\*git\*,\*log\*,\*assets\*}
または現在のフォルダ
grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'