お手柔らかに
はじめに
grepとfindの違いが理解できていなかったのでお勉強
その中で、正規表現とワイルドカードという似て非なる存在が現れたので、それらの違いについても整理
grepとfindの違い
結論、ファイルの中身を検索したいのか、ファイルの存在を検索したいのかによって使い分ける
項目 | grep |
find |
---|---|---|
対象 | ファイルの中身(テキスト) | ファイルの存在(名前や場所) |
使うときの目的 | 文字列の検索・抽出 | ファイルの探索・絞り込み |
例 |
grep 'error' server.log → ログの中から error を含む行を表示 |
find . -name "*.log" → 拡張子が .log のファイルを探す |
正規表現とワイルドカードの違い
項目 | ワイルドカード | 正規表現 |
---|---|---|
誰が解釈するか |
シェルが解釈する → コマンドが実行される前にシェルがワイルドカードを解釈し、その結果をコマンドに渡している(*1) |
コマンド本体が解釈する → シェルは正規表現のままコマンドに値を渡し、コマンド本体が正規表現を解釈する |
使う場面 | ファイル名をざっくり指定するとき | ファイルの中身や文字列のパターンを細かく抽出したいとき |
よく使うコマンド |
ls , rm , cp , mv , find -name など |
grep , sed , awk , find -regex など |
*1:例えば ls *.txt
なら、*.txt
を見てシェルはワイルドカードだと判断し、 sample.txt
example.txt
といった結果を ls
に渡す。
つまり ls
が受け取る値は *.txt
ではなく sample.txt
example.txt
となる。
まとめ
「誰が解釈するのか」が分かるとワイルドカードと正規表現の違いが見えてくる