Задача: вычленить из текстового файла блок строк посредством базового набору CLI-утилит.
Такое часто случается - на удалённом сервере имеется действительно большой файл журнала событий, из которого требуется вычленить тоже немаленький кусок данных для последующей выгрузки и анализа в другой системе. Целиком файл не скопировать из-за его размеров (например, 900GB при канале передачи данных в 1-2Mbps), открыть в каком-то визуальном редакторе и скопировать строки через "буфер обмена" невозможно из-за ограниченного объёма ОЗУ (на проблемных серверах запросто может быть не более 1-2GB доступной оперативной памяти).
Простейший способ таков - открыть файл в консольном текстовом редакторе последовательного считывания, выяснить номера строк начала и завершения интересующего нас блока данных, после чего утилитой последовательной обработки файлов скопировать строки в нужном диапазоне.
Для открытия текстового файла удобнее всего воспользоваться утилитой "vim" (расширенный вариант "vi") - в её интерфейсе текущий номер строки и позиции курсора в таковой указывается в нижней правой части экрана. Вероятно, её потребуется установить - по умолчанию в системном комплекте приложений имеется только менее функциональная утилита "vi":
# aptitude install vim
Если приходится обходится "vi", то отображение строк включаем специальной командой (командный режим активируется последовательным вводом символов "Esc" и ":" ), уже после открытия файла - примерно так:
$ vi -n ./large-file
....
:set number
:set number
Посредством "vi" или "vim" открываем большой тестовый файл и находим (для вызова интерфейса поиска в старых Unix-утилитах используется символ "/") там строки начала и завершения нужного нам блока данных:
$ vim -n ./large-file
....
/string
/string
Раз уж мы здесь разбираем вызов каждой команды "vi", то подскажу и способ выйти из него без сохранения изменений - последовательность "Esc", ":" и "q".
Для вычленения блока текстовых данных по имеющимся номерам строк воспользуемся утилитой "sed", поставляемой в комплекте абсолютно всех Linux-систем:
$ sed -n 11966,97423p ./large-file > ./part-of-large-file
Если сохранять эту часть файла в локальной файловой системе негде или незачем, то можно выгружать поток данных посредством SSH-туннеля на целевую Linux-станцию:
$ sed -n 11966,97423p ./large-file | ssh user@remotehost "cat > ./part-of-large-file"