web-dev-qa-db-ja.com

Unix / Linux:文字列を含むファイルを再帰的に検索します

重複の可能性:
複雑な検索のためにfindとgrepを組み合わせる方法は?(GNU/linux、find、grep)

ファイルのディレクトリ階層があります(プレーンテキストのものとバイナリのものがあります)。

ファイルとディレクトリの階層を再帰的に検索して、指定した文字列を含むファイルの名前を探し、可能であれば「ファイル名と行番号へのパス」のリストを出力する簡単な方法はありますか?

基本的に、私が欲しいのは、行番号を印刷するオプションもあることを除いて、ほぼ同じです。

#!/bin/bash
#
# Recursively search files for pattern specified as argument.
#

pattern="$1"

if [ -z "$pattern" ]; then echo "$0: Unspecified pattern."; exit; fi

searchfiles () {

  for filename in *; do

    if [ -f "$filename" ]; then {

      result=`/bin/grep -e "$pattern" "$filename"`

      if ! [ -z "$result" ]; then echo "File: `pwd`/$filename"; fi

    }

    Elif [ -d "$filename" ]; then

      cd "$filename"

      searchfiles

      cd ..

    fi

  done

}

searchfiles

OK、以下に提案するように、再帰的なgrepを使用できますが、ファイル名と行番号だけが必要です。長い長い行がたくさんあると、印刷時に端末を折り返すと内容が乱雑になる可能性があるため、これが私の解決策でした:

grep -Rn index.php * | sed -e 's/ .*//g'

よろしく、

ジョン・ゴッシュ

2
John Goche
grep -Rn "your_string" *

トリックを行う必要があります。

4
Nunus