複数の異なるファイルの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
などの行範囲の概念がないため、式は期待どおりに機能しません(スラッシュとカンマを含むリテラルテキストのみが一致するため、おそらく空の結果が出る理由です)。sed
awk
/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
なります)の出力は、現在のディレクトリから呼び出されたファイルにリダイレクトされます(ファイルがまだ存在しない場合は切り捨てられる(空になるか)、生成されます)。awk
sed
As.doc