文字列を再帰的に検索しようとしていますが、次grep
の結果が表示されます。
$ grep -r "stuff" *
grep: unrecognized option '---corporate-discount.csv'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
-
Bashがパラメータで始まるファイルを渡すのを防ぐ方法は何ですか?
答え1
まず、ダッシュで始まるパラメータの解釈は、実行中のプログラムgrep
や他のプログラムによって異なります。シェルにはこれを制御する直接的な方法はありません。
ほとんどのプログラムと同様に、これらのファイルを(完全に無視せずに)処理しようとしていると仮定すると、これはオプションの終わりを示すとgrep
認識されます。--
grep -r -e "stuff" -- *
やりたいことをします。そこの場合も-e
astuff
で始まります。-
または、次のものを使用できます。
grep -r -e "stuff" ./*
-
後者は、呼び出される現在のディレクトリにファイルがある場合にも問題を回避します。--
区切り文字の後にもstdinとgrep
解釈されますが、-
現在のディレクトリから./-
呼び出されるファイルです。-
答え2
到着Bash拡張が「-」で始まるファイルを渡すのを防ぐあなたはそれを使用することができます:
echo [!-]*
ほとんどのシェルで移植可能であるか、ksh、bash、zshにのみ適用されます。
echo !(-*)
例: このファイルを含むディレクトリ
$ echo *
a b c ---corporate-discount.csv d -e --option.txt
リストのみ(extglob
アクティブな場合):
$ shopt -s extglob
$ echo !(-*)
a b c d
$ echo [!-]*
a b c d
-
ただし、オプションとしてaと宣言されたファイルを解釈しないようにgrepに指示しながら、すべてのファイルを処理するには、次のように追加します./
。
grep -r "stuff" ./*
または、-
リストされたファイルの中に保証された呼び出されたファイルがない場合(grepは、独自のファイルを次の-
ように解釈します。標準入力から読む) 次のように使用できます。
grep -r -- "stuff" *