使いたい株式会社クラスとそのメソッドをPythonファイルとして印刷します。私はこれが使いやすいと思います。
ag --context=0 --nocolor -os '^\s*(def|class)\s+[_A-Za-z]*' prog.py
しかし、私が理解できない理由で、これは空行とも一致します。たとえば、prog.pyを次のように設定すると、
class MyFavouriteClass
def __init__
def __contains__
blah
class MyNextFavouriteClass
def _repr_
def __iter__
その後、空行を含むファイル全体を返します。とは別にもちろん、インクルードのblah
場合は、常に出力を別の項目にパイプして空白行を削除できますが、最初は正しく実行することをお勧めします。
私はこの問題が正規表現とは何の関係もなく、むしろag
sとflags--context
の機能だと思います--after
が、--before
私の要件を満たすこれらの機能の組み合わせを見つけることができません。
どんなアイデアがありますか?
答え1
--context
ではありませんが、\s*
正規表現パターンで始まります。ag
Normalのように1行ずつ検索するのではなく、grep
ファイル全体を一度に(または一度に少なくとも2行ずつ)検索するようです。 Perlの1行のコードに似ています。
perl -0777 -ne 'print "$&\n" while /^\s*(def|class)\s+[_A-Za-z]*/msg' ../prog.py
したがって、\s
空白(改行を含む)と一致するため、前の空白行、改行、次の空白行の前の空白、キーワードと一致しますdef
。行の前に空の行を追加すると、その行はパターンに合わずblah
印刷されません。blah
不要な一致を削除するには、代わりに/^ *...
またはを使用してください。 (最初のスペース+アスタリスク)/^[ \t]*...
/^\s*...