2つの文字列間のテキストを再帰的に検索します。

2つの文字列間のテキストを再帰的に検索します。

複数の異なるファイルの2つの文字列の間にあるテキストを再帰的に検索しようとしています。以下の両方がhit.txtファイルを含むフォルダを検索するときに機能しますが、より高いレベルのディレクトリでこれを実行したいので、2つのいずれかを各フォルダで個別に実行することはありません。

awk '/aaa/,/bbb/' hits.txt  >> As.doc
sed -n '/aaa/,/bbb/p' hits.txt > As.doc

以下の再帰検索を実行するためにさまざまなgrepコマンドを試しましたが、空の文書のみが生成されます。

grep -r --include='*.txt' '/aaa/,/bbb/' > As.doc

何が最もうまくいくのか、上記のいずれかで find を使うべきかどうかはわかりません。

ベストアンサー1

このユーティリティには、twoやhasgrepなどの行範囲の概念がないため、式は期待どおりに機能しません(スラッシュとカンマを含むリテラルテキストのみが一致するため、おそらく空の結果が出る理由です)。sedawk/aaa/,/bbb/

表示されsedたコマンドがawk機能し、ヘルプが必要な唯一のことは、これらのコマンドを現在のディレクトリの名前.txtで終わるファイルに再帰的に適用すると想定しています。

find . -type f -name '*.txt' -exec awk '/aaa/,/bbb/' {} + >As.doc

または

find . -type f -name '*.txt' -exec sed -n '/aaa/,/bbb/p' {} + >As.doc

このコマンドは、現在のディレクトリ内または下のすべての一般的なファイルを見つけて、一括呼び出しまたはawkユーティリティsedを作成します。 (またはの出力にfindなります)の出力は、現在のディレクトリから呼び出されたファイルにリダイレクトされます(ファイルがまだ存在しない場合は切り捨てられる(空になるか)、生成されます)。awksedAs.doc

おすすめ記事