私は多くのサブディレクトリを持つディレクトリを持っていますが、すべて「name」ファイルを持っていて、各ファイル「name」の各文字列「str」の下に5行を印刷したいと思います。
答え1
"str"を含む行が見つかると、次の5行が印刷されます。 (これがあなたが望むものであることを願っています):
find . -type f -name name | xargs awk '/^str$/ {i=1; next;} \
i>0 {print; if(i<5) i++; else i=0;}'
答え2
grepを使う
find -type f -name "name" -exec grep -F -h "str" -A5 {} +
その後、「name」という名前のすべてのファイルを検索し、文字列「str」を探す各ファイルに対してgrepを実行します。この-A5
フラグを使用するには、grep
各ゲームの後に5行を表示する必要があります。ファイル名が表示されないように-h
します。grep
sedで
find -type f -name "name" -exec sed -n -s '/txt/,+5 p' {} +
ここも同じだ。sed -n
行は印刷されません。ラインが/txt/,+5
ブロック内にある場合にのみ出力が行われます。これは、「'txt'を含む行から始まる6行」を含むことを意味します。
一致する行がありません
どちらのソリューションも「txt」を含む行を印刷します。必要でない場合は、sed
以下を使用して削除します。
find -type f -name "name" -exec sed -n -s '/txt/,+5 { /txt/ d; p }' {} +