Mac標準のgrepでwarning: recursive search of stdinって言われる


  • 環境
    • macOS Mojave バージョン10.14.5
    • grep (BSD grep) 2.5.1-FreeBSD

事象 : grepコマンドを使ったらなんか言われた

現在地のディレクトリにあるファイルからgrepしたかった。
warningだが、grepの結果が返ってこない・・・
他のところで使っているgrepと同じように使ってしょっちゅう間違えるのでメモ

$ cd {ファイルがあるディレクトリ}
$ grep -irl {探したい文字}
grep: warning: recursive search of stdin

原因 : grep対象のファイルやディレクトリを指定していないから(かもしれない)

mac標準のgrepはなぜかエラーが出るので、brew install grepしてみた - Qiitaの投稿を見て自分と共通点が2つあるのに気がついた。

  1. -rを使っている
  2. 対象のファイルやディレクトリを指定していない

なので試してみる。

$ man grep
# 抜粋
     -R, -r, --recursive
             Recursively search subdirectories listed.
# -rを-Rにしてみたけど結果は同じだった
$ grep -iRl {探したい文字}
grep: warning: recursive search of stdin

# -rを使わないとメッセージは出力されないけどgrepの結果が返ってこない・・・
$ grep -il {探したい文字}

# ディレクトリを指定してみるとうまくいった
$ grep -ril {探したい文字} .
./hoge.md
./.git/index
./fuga.md
./ponsuke.md

対応方法 : 対象のファイルやディレクトリを指定する

# これは見づらい
$ grep -ril {探したい文字} ./
.//hoge.md
.//.git/index
.//fuga.md
.//ponsuke.md
# こうすれば隠しファイル的なものは外される
$ grep -ril {探したい文字} ./*
./hoge.md
./fuga.md
./ponsuke.md
# ファイルを指定した場合 : ファイルの場合は-rlはあんまいらない
$ grep -ril {探したい文字} ponsuke.md 
ponsuke.md