打印子目录中所有文件中特定字符串下的所有 5 行

打印子目录中所有文件中特定字符串下的所有 5 行

我有一个目录,其中包含许多子目录,其中所有子目录都有一个文件“名称”,我想在每个文件“名称”中打印每个字符串“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”的文件,并为每个文件执行 grep 来查找字符串“str”。该-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 }' {} + 

相关内容