grepとfindによる検索の違い
ファイルを検索するgrep
コマンドとfind
コマンドについて整理しています.
grep
コマンドはファイルの中身を検索するのに対し,find
コマンドはファイル名や更新日から検索を行います.
目次
grepコマンド
ファイル中の文字列を検索するにはgrep
を使います.
正規表現を利用することが可能です.
カレントディレクトリの拡張子txt
のファイルにおいて,文字列を検索するには,
grep '文字列' *.txt |
とします.
AND検索・OR検索
検索する文字列が複数存在する場合, e
オプションでOR検索できます.
grep -e '文字列1' -e '文字列2' *.txt |
AND検索するにはパイプで繋ぎます.
grep '文字列1' *.txt | grep '文字列2' |
NOT検索
指定文字列を含まないものを選び出す場合,v
オプションを使います.
その他のオプション
厳密な検索ではx
オプションを用い,指定した文字列とある1行が等しい場合にのみマッチさせます.
i
オプションがつくと,大文字・小文字の区別は無視されます.
文字列を検索する際にn
オプションを付けておくと,行番号を表示することができます.
grep -n '文字列' ファイル |
ファイルから特定の文字列を含む行を抽出するには,a
オプションを使います.
grep -a '文字列' ファイル |
findコマンド
条件に適合するファイルを検索するにはfind
コマンドで行うことができます.
更新時刻に基づくファイル検索
対象となるディレクトリ以下の階層で,7日以内に更新のあったディレクトリを調べるなら,
find 対象ディレクトリ -mtime -7 -type d |
とします.
次は,カレントディレクトリで20分以上存在するファイルを見つける例です.
find . -mmin +20 |
複数ファイルで句読点を一括置換
次は,find
コマンドによってカレントディレクトリ以下の階層のmdファイルを検索し,句読点をピリオドとコンマに変換する例です.
find . -name "*.md" | xargs -I {} sed -i -e "s/。/./g" {} |
複数ファイルでパーミッションを一括変更
カレントディレクトリ(.
)以下の全てのディレクトリを755,全てのファイルを644にする例です.
find . -type d -exec chmod 755 {} + |