こんにちは、Linux でファイル内のテキストを検索するためにこのコマンドを使用しています。
find ./ -type f -exec grep -l "Text To Find" {} \;
コマンドは正常に動作しますが、テキストを含む行を自動的に印刷したいと思います。可能であれば、テキストの上の最初の 2 行とテキストの後ろの 2 行を印刷したいと思います。
また、検索を使用する代わりに、テキストを検索して行を印刷する別の提案も歓迎します。
よろしくお願いします。
find ./ -type f -exec grep -Hn "Text To Find" {} \;
-A および -B フラグを使用して、一致の前後の行を出力します。
find ./ -type f -exec grep -Hn -A1 -B1 "Text To Find" {} \;
また、grepを使用することもできます:
grep -R -Hn -A1 -B1 "Text To Find" *
grepだけではないのはなぜですか?
grep -r -C2 "Text To Find" *
find
より高速な検索のために、次の代替構文を使用できます。
find . -type f -print0 | xargs -0 grep -Hn -C2 "Text To Find"
grep
すべてのファイルを呼び出す代わりに(これが実行することです-exec ... {}
)、一連のファイルを呼び出しgrep
ます。
-print0
、-0
およびオプションは移植性がないことに注意してください( 、およびプログラム-C2
の GNU バリアント、つまり、ほとんどの Linux、BSD などのインストール、および Cygwin や MinGW では正常に動作しますが、「古い」Solaris では動作するとは思わないでください。 HPUXなどがインストールされます。)find
xargs
grep