我想在匹配的行,匹配的行和匹配的行的第n行之前打印第n行,其中“ n”大于2。
这是我的数据文件的示例(下面的行号不是数据的一部分,仅用于标识),我要搜索的模式是example.txt
文件中的“ blah” 。
$ cat example.txt
1. a
2. b
3. c
4. d
5. blah
6. e
7. f
8. g
9. h
10. blah
11. i
12. f
13. g
14. h
我希望输出为:
1. b
2. blah
3. g
4. f
5. blah
6. g
请建议任何一支班轮!
这是一个perl单一代码:
$ perl -ne '$n=3;push @lines,$_; END{for($i=0;$i<=$#lines;$i++){
if ($lines[$i]=~/blah/){
print $lines[$i-$n],$lines[$i],$lines[$i+$n]}}
}' example.txt
b
blah
g
f
blah
g
要改变周围的行数,改变$n=3;
到$n=N
其中N
是所需的号码。要更改匹配的模式,请更改if ($lines[$i]=~/blah/)
为if ($lines[$i]=~/PATTERN/)
。
如果数字实际上是文件的一部分,则可以执行以下操作:
$ perl -ne '$n=3;push @lines,$_; END{for($i=0;$i<=$#lines;$i++){
if ($lines[$i]=~/blah/){
print $lines[$i-$n],$lines[$i],$lines[$i+$n]}}
}' example.txt | perl -pne 's/\d+/$./'
1. b
2. blah
3. g
4. f
5. blah
6. g
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句