特定の文字列パターンを含むすべてのファイルを見つける必要がありました。心に来る最初のソリューションを使用している検索をしてパイプxargsのはgrep:
find . -iname '*.py' | xargs grep -e 'YOUR_PATTERN'
しかし、複数の行にまたがるパターンを見つける必要がある場合、バニラgrepは複数行のパターンを見つけることができないため、行き詰まります。
特定の文字列パターンを含むすべてのファイルを見つける必要がありました。心に来る最初のソリューションを使用している検索をしてパイプxargsのはgrep:
find . -iname '*.py' | xargs grep -e 'YOUR_PATTERN'
しかし、複数の行にまたがるパターンを見つける必要がある場合、バニラgrepは複数行のパターンを見つけることができないため、行き詰まります。
回答:
そこで、Perl互換正規表現GREPを表すpcregrepを発見しました。
たとえば、 ' _name '変数の直後に ' _description '変数が続くファイルを見つける必要があります。
find . -iname '*.py' | xargs pcregrep -M '_name.*\n.*_description'
ヒント:パターンに改行文字を含める必要があります。プラットフォームによっては、 '\ n'、\ r '、' \ r \ n '、...
pcregrep
Macで利用可能brew install pcre
-H
各一致の前にファイル名を出力する使用:pcregrep -HM
。
なぜあなたが行かないのawk:
awk '/Start pattern/,/End pattern/' filename
awk
、ほとんどの* nixシステムに付属する使用法です。
awk '/Start pattern/,/End pattern/ {printf NR " "; print}' filename
ます。行番号に固定幅を指定することにより、見栄えを良くすることができますawk '/Start pattern/,/End pattern/ {printf "%-4s ", NR; print}' filename
。
-z
しないと複数行の検索にgrepを使用できなかったため、検索が1行で分割され-o
ず、一致した部分のみが印刷されました。
grep -rzl pattern *
、-rzoは機能しませんでした)
brew reinstall --with-pcre git
grep -P
またlibpcreを使用しているが、ずっとより広くインストールされています。title
HTMLドキュメントの完全なセクションを見つけるには、たとえそれが複数行にわたる場合でも、これを使用できます。
grep -P '(?s)<title>.*</title>' example.html
以来PCREプロジェクト perlの標準を実装し、参考のためにperlのドキュメントを使用します。
以下に、より便利な例を示します。
pcregrep -Mi "<title>(.*\n){0,5}</title>" afile.html
5行までの場合でも、htmlファイルのタイトルタグを検索します。
以下は無制限の行の例です。
pcregrep -Mi "(?s)<title>.*</title>" example.html
(?s)
、あなたの正規表現にそうように、:"(?s)<html>.*</html>"
$
(パターンの終わりで)チェックして、それが行の終わりであることを示すことができます。もご覧くださいglob(7)
。また、この興味深いWebサイトを見つけることもできます:regular-expressions.info
この答えは役に立つかもしれません:
再帰的に検索するには、フラグ-R(再帰的)および--include(GLOBパターン)を使用できます。見る:
ex
/ vi
エディターとglobstarオプションの使用(構文はawk
andと同様sed
):
ex +"/string1/,/string3/p" -R -scq! file.txt
どこaaa
があなたの出発点でありbbb
、あなたの終わりのテキストです。
再帰的に検索するには、次を試してください:
ex +"/aaa/,/bbb/p" -scq! **/*.py
注:**
構文を有効にするには、shopt -s globstar
(Bash 4またはzsh)を実行します。