mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

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

[ pc_tips ] [ Linux ]

こんばんは。

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

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

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

1
2
3
4
5
$ 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個以上含んでいないかを確認したい場合、等)
以下のようにすることで実現可能である。(正規表現をうまく利用して)

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

もしくは

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

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

以上。

Comments