样例:

1
2
3
4
5
6
7
8
9
10
cat test.txt
aaaa
bbbb
cccc
dddd
eeee
ffff
gggg
hhhh
iiii

使用sed

使用sed过滤指定行!(以过滤eeee为例)

1
2
#匹配eeee所在行,并打印eeee后3行
sed -n '/eeee/,+3p' test.txt

打印匹配行的上一行

1
2
3
#x交换空间,p打印,h当前模式空间中内容覆盖至缓存区
#sed命令参数太过复杂,暂时记录这这里
sed -n '/eeee/{x;p};h' test.txt

使用grep

使用grep先确定匹配行号,再对行号前后增加!(以过滤eeee为例)

1
2
#获取eeee行号
cat test.txt grep -nE "^eeee$"awk -F":" '{print $1}'

1
2
3
4
5
6
7
8
9
10
#获取eeee所在行号
NUM=`cat test.txt grep -nE "^eeee$"awk -F":" '{print $1}'`
#eeee所在行号的上一行
NUM_1=`echo "$NUM-1"bc`
#eeee所在行号的下一行
NUM1=`echo "$NUM+1"bc`

sed -n "$NUM_1"p test.txt
sed -n "$NUM"p test.txt
sed -n "$NUM1"p test.txt

执行结果如下: