我有一个目录,其中包含许多子目录,其中所有子目录都有一个文件“名称”,我想在每个文件“名称”中打印每个字符串“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 }' {} +