441

最初の一致のみを返すことを期待して、次の引数を指定してgrepを使用してディレクトリを再帰的に検索しています。残念ながら、それは複数を返します-私が最後に見たとき、実際には2つです。特に望ましい結果が得られないまま、議論が多すぎるようです。:-/

# grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/directory

戻り値:

Pulsanti Operietur
Pulsanti Operietur

たぶん、grepはこれを行うための最良の方法ではありませんか?教えてくれてありがとう。

4

7 に答える 7

660

-m 1任意のファイルで最初に一致したものを返すことを意味します。ただし、引き続き他のファイルを検索します。また、同じ行に2つ以上一致した場合は、すべて表示されます。

head -1この問題を解決するために使用できます。

grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -1

各 grep オプションの説明:

-o, --only-matching, print only the matched part of the line (instead of the entire line)
-a, --text, process a binary file as if it were text
-m 1, --max-count, stop reading a file after 1 matching line
-h, --no-filename, suppress the prefixing of file names on output
-r, --recursive, read all files under a directory recursively
于 2012-12-30T18:44:04.450 に答える
45

grep結果をstdbufheadと組み合わせてパイプできます。

N 番目の一致後に確実に停止するには、出力をバッファリングしないように使用stdbufする必要があることに注意してください。grep

stdbuf -oL grep -rl 'pattern' * | head -n1
stdbuf -oL grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -n1
stdbuf -oL grep -nH -m 1 -R "django.conf.urls.defaults" * | head -n1

head1行消費するとすぐに終了し、パイプに何かを出力している間にgrep受信します。SIGPIPEhead

これは、ファイル名に改行が含まれていないことを前提としています。

于 2016-10-20T11:03:37.853 に答える
24

私のgrep-a-likeプログラムackには、-1どこかで見つかった最初の一致で停止するオプションがあります。-m 1@mvp が参照する もサポートします。ソース コードの大規模なツリーを検索して、1 つのファイルにしか存在しないことがわかっているものを検索する場合、それを見つける必要がなく、Ctrl-C を押す必要があるためです。

于 2012-12-30T18:50:27.023 に答える