「Webサイトの中からXXXって文字消したいんだよね〜」のように、対象のファイル群から、指定した文字列が含まれるものを抽出したいことってよくあると思います。そんな時に参考にしてください。
例:カレントディレクトリ以下で、文字列「しいたけ」が含まれるファイルの一覧をresult.txt
に保存する。
$grep -rl 'しいたけ' ./ > ~/result.txt
特定のパターンのファイル群に対して検索する場合は、find
を組み合わせる。
例:カレントディレクトリ以下のhtmlファイルに対して、ワード「しいたけ」が含まれる一覧を抽出する。
$find . -type f -name '*.html' -print | xargs grep 'しいたけ' -l
egrep
を使えば、複数パターンの同時検索もできるようです。
例:カレントディレクトリ以下のhtmlファイルに対して、ワード「しいたけ」「まいたけ」が両方含まれる一覧を抽出する。
$find . -type f -name '*.html' -print | xargs egrep 'しいたけ|まいたけ' -l
出力フォーマットについては、ファイル名だけ出力したり、対象の行番号を合わせて出力したり、等コマンドのオプションで対応できるので、マニュアルを読むべし。
【追記】find
組み合わせなくてもできる旨コメントで教えていただきました。こちらの方がパフォーマンスよさそうですね。 --include
や--exclude-dir
オプションを使えば対象範囲を柔軟に設定できそうですね。
$grep --exclude-dir ".svn" --include "*.html" "しいたけ" -l
@budougumi0617 さんありがとうございます!