Если ваш grep
не -A
, -B
и -C
, то эта sed
команды может работать для вас:
sed -n '1bb;:a;/PATTERN/{h;n;p;H;g;bb};N;//p;:b;99,$D;ba' inputfile > outputfile
где PATTERN
является Регул r выражение, которое вы ищете, и 99
является одним большим, чем количество требуемых контекстных строк (что эквивалентно -C 98
).
Он работает, сохраняя окно строк в памяти, и когда регулярное выражение совпадает, выводятся захваченные строки.
Если ваш sed
не любит и предпочитает точку с запятой -e
, эта версия может работать для вас:
sed -n -e '1bb' -e ':a' -e '/PATTERN/{h' -e 'n' -e 'p' -e 'H' -e 'g' -e 'bb}' -e 'N' -e '//p' -e ':b' -e '99,$D' -e 'ba' inputfile > outputfile
Для вашего выходного диапазона линии, это будет работать и закончит немного быстрее, если есть большое количество строк после окончания диапазона:
sed -n '100000,20000p;q' inputfile > outputfile
или
sed -n -e '100000,20000p' -e 'q' inputfile > outputfile
В случае, если вы не знаете, существует сайт QIX для unix/linux: http://unix.stackexchange.com/ –
Сайт суперпользователя - еще одна альтернатива. –
И есть очень хороший сайт под названием StackOverflow, для которого это совершенно подходящий вопрос! –