UNIXコマンドでファイル探すときにfindとかgrep使うのですが、シェルのワイルドカード*
とgrepの中で使う正規表現のワイルドカード*
が違うこととかしらなかったので、その辺に関するメモ。初心者。
findの基本的なこと
find . -name '*.php'
などと書きます。
*
-> 任意の0文字以上。
?
-> 任意の一文字。
なので、
find . -name '???.txt'
などとすれば、3文字のファイル名のものを探してくる。
ちなみに、
find . -name *.php
などと書くと、unknown primary or operator というようなエラーなのかなんなのか、よくわからないのが出てきます。なので、ちゃんと''
もしくは""
で囲んでおきます。
grepの基本的なこと
grep piyo hoge.txt
などと書きます。
正規表現を使うと、
grep 'p.*o' hoge.txt
と書きます。検索する文字列が単純な文字であれば''
や""
は無くても大丈夫です。けど、正規表現や検索文字の間にスペースなどが入る場合は、それらで囲む必要があります。
grepのオプション
-e
-> piyoもしくはfugaを含む行を検索するときに使う。
grep -e piyo -e fuga hoge.txt
-E
-> 正規表現の+
とかが使えるようになる。(正規表現の拡張)
grep -E 'p.+o' hoge.txt
逆に正規表現を使えなくするには、-F
を使う。
findとgrepを併用する。
どのファイルか分からないけど、Hogeディレクトリ配下で、piyoという文字列を含んでいる部分とそのテキストファイルを知りたい。
find ~/Hoge -name '*.txt' | xargs grep piyo