特定のパターン(他の2つの文字列の間に表示される文字列)に一致するファイルのリストを印刷する必要があります。どうすればいいですか?テキストを抽出したくなく、このパターンに一致するファイルだけをリストしたいと思います。
PREFETCH
advanced_override.begin
2つの文字列の間に表示される文字列のインスタンスを含むすべてのファイル名を一致させ、一覧表示するコマンドが必要ですadvanced_override.end
。これらのファイルはすべて同じディレクトリに存在するため、このコマンドは現在のディレクトリ「.」の内容を検索し、指定されたパターンと一致するファイル名を一覧表示する必要があります。
修正する:
次の内容が必要ですadvanced_override.begin <lots of text> PREFTECH <lots of other text> advanced_override.end
。これら2つの文字列間の特定の文字列を一致させるには、この文字列が必要で、おそらく前後の他の多くのテキストも一致する必要がありますPREFETCH
。
アップデート2:
入力ファイルはXMLファイルです。advanced_override.begin
で始まるセクションは、advanced_override.end
多くのテキスト行を含めて大きくすることができます。
ベストアンサー1
pcregrep
可能であれば、-l
スイッチを使用して一致するファイル名のみを一覧表示できます。
pcregrep -lM '(?s)advanced_override\.begin.*PREFETCH.*advanced_override\.end' ./*
PREFETCH
複数行モードで中間の2つの文字列を検索します。現在のディレクトリにテキストファイルのみがあると仮定し(そうでない場合はループまたはをfor
使用できます)、各ファイルには次から始めて終わるfind
セクションが含まれているとします。複数のセクションでは、否定的な予測を使用することをお勧めします。たとえば、次のようになります。advanced_override.begin
advanced_override.end
PREFETCH
pcregrep -lM '(?s)advanced_override\.begin(?:(?!advanced_override\.end).)*PREFETCH.*advanced_override\.end' ./*