Linux - 特定の文字列を「複数個」含むファイルの検索!

Updated:


ディレクトリ内から特定の文字列を2個以上含むファイルのみを検索するコマンドについての備忘録です。
(特定の文字列を「1個以上」含むファイルを検索するコマンドはよくあると思いますが)

1. 前置き(よくあるケース)

よくある、特定のディレクトリ内の複数のファイルから特定の文字列(1個以上)を含むファイルを抽出するコマンドは、以下のようになるかと思う。
(以下は、カレントディレクトリ内の複数の “xml” ファイルの中から “Hoge” 文字列を含むファイルを検索する例)

$ find ./ -name "*.xml" -print0 | xargs -0 grep -l "Hoge"

もしくは

$ find ./ -name "*.xml" -exec grep -l "Hoge" {} \;

find コマンドの -print0 オプションと xargs コマンドの -0(もしくは --null)オプションは、区切り文字を null 文字に設定するおまじない。

2. 文字列を複数個含むファイルを検索する例

時に特定の文字列を2個以上含むファイルを検索したいことがある。
(正常なら指定の文字列を1個しか含まないはずのファイルに、その文字列を2個以上含んでいないかを確認したい場合、等)
以下のようにすることで実現可能である。(正規表現をうまく利用して)

$ find ./ -name "*.xml" -print0 | xargs -0 grep -l -e "\(Hoge\)\{2,\}"

もしくは

$ find ./ -name "*.xml" -exec grep -l -e "\(Hoge\)\{2,\}" {} \;

個人的には意外と使うコマンドについてでした。

以上。





 

Sponsored Link

 

Comments