再帰的なgrepがSTDOUTで機能しないのはなぜですか? [閉鎖]

再帰的なgrepがSTDOUTで機能しないのはなぜですか? [閉鎖]

私は長い間私のUbuntu / Mintコンピュータでいくつかのカスタムエイリアス(例えばalias grep='grep -irn --color --line-buffered'

デバッグを試みている間、問題のオプションがSTDOUTをgrep'pingするのではなく、現在のディレクトリから再帰的に検索する再帰オプションであることがわかりました。

私は現在grep 2.16を実行しており、期待どおりに2.10を実行しているシステムを見つけました。

例: tail -f /var/log/xxx.log | grep -irn yyy

-r-d recurse次のディレクトリオプションの代わりに/ make grep検索フォルダに何が変更されましたかman

-d ACTION, --directories=ACTION
    If an input file is a directory, use ACTION to process it.
    [...] If ACTION is recurse, read all files under each directory, recursively,
    following symbolic links only if they are on the command line. This is
    equivalent to the -r option.

答え1

この回答はコメントで書く方が適していますが、長すぎて回答として投稿します。

grepの動作は私の関心を引き起こし、OPが正しい方向に向かっていると思います。また、新しいバージョンのgrepが以前のバージョンとは異なる動作をすることも発見しました。以前のバージョンでは、を使用して引数を渡さない場合は、-r文書に従って標準入力からのみパターンを検索していましたgrep searches the named input FILEs (or standard input if no files are named, or if a single hyphen-minus (-) is given as file name) for lines containing a match to the given pattern。ただし、最新バージョンでは、ファイル名を指定しなくても、現在のディレクトリからパターンを検索します。確認する:

$ mkdir /tmp/grep-test
$ cd /tmp/grep-test
$ echo pam > FILE
$ grep --version
grep (GNU grep) 2.10
(...)
$ grep pam -r
pam
pam
$ /home/ja/grep/grep-2.16/src/grep pam -r
FILE:pam

変更ログをgrepingする以外に、それに関連する変更についての言及が見つかりませんでした。これ:

**行動の変化

-r(--recursive)オプションは、コマンドラインシンボリックリンクのみに従います。また、デフォルトでは、-rはコマンドラインで指定されたデバイスのみを読み込みます。これは --devices でオーバーライドできます。 -R は以前と同じように動作するため、デフォルトではすべてのシンボリックリンクに従い、すべてのデバイスを読み取る以前の動作を好む場合は -R を使用します。

OPがstdoutを再帰的に検索した理由は依然として疑問ですが、grepで間違いなく変更されました。

関連情報