# define line range constants
before=4
line=6
after=3
# setup the sed commands s.t. pattern space holds $before number
# of lines before we hit the line number $line and $after after
s='$!N'
p=`seq -s "$s" "$before"`
a=`seq -s "$s" 0 "$after"`
N=${p//[0-9]/;}
n=${a//[0-9]/;}
# main...
seq 10 |
sed -e "
1{ $N }
\$d;N
$line!D
$n;q
"
Другой метод — это проглотить файл и установить для FS
значение \n
, чтобы поля (теперь строки) находились в @F
. Остается нарезать его вокруг 6-го
строка и 4 элемента до и 3 строки после:
perl -alF\\n -0777ne '$,=$\;print @F[6-4-1..6+3-1]' yourfile
2
3
4
5
6
7
8
9