我正在尝试在文件中搜索某种模式,如果找到,我希望看到结果中的该行及其它 10 行。
到目前为止
grep -n pattern file | cut -d: f1
现在不确定如何使用这个输出来进行打印,就像
sed -n result,(result+10)p file
如果图案有多行,则可能会发出一些指令。
任何帮助表示感谢
答案1
如果grep -A
不起作用,请尝试
awk '/pattern/ {for(i=0;i<number_of_lines;i++){print;getline}}' <filename>
否则 sed 有另一个肮脏的解决方案
sed -n '/pattern/ {p;n;p;n;p;...}' <filename>
这里 p-> 打印,n-> 转到下一行。所以 p 的数量就是要打印的行数
更新:
要用作函数,请写入 test.sh
jobcheck(){
awk "/$1/"' {for(i=0;i<10;i++){print;getline}}' $2
}
然后就
source test.sh
跑步,
jobcheck "pattern" "file"
更新:根据 Jonathan Leffler 的建议,如果接下来的 10 行中的任何一行包含该模式,则计数应从该行开始,因此
pattern ->start printing from here to next 10 lines
blah
blah
pattern ->forget about the last 2 lines, start counting from here
blah
blah
因此更新后的 awk 命令将如下所示
awk '/pattern/{max_line=NR+2} {if(NR<=max_line) print}' <filename>
同样,jobcheck 内部也会发生变化。干杯:)
答案2
使用 grep 2.10:
grep -A 10 "pattern" your_file
将在匹配后打印 10 行
来自grep 手册页:
-数字
--after-context=num
打印匹配行后的 num 行尾随上下文。
使用 GNU awk 3.1.8:
awk '{if(a-->0) {print; next}} /pattern/{print; a=10}' your_file
答案3
我会用:
sed -n '/pattern/{N;N;N;N;N;N;N;N;N;N;p;}'
或者
sed '1,/pattern/{/pattern/!d;}' | sed '12,$d'