Когда вы управляете своими собственными серверами, одна из вещей, которые вам приходится выполнять на полурегулярной основе, – это извлечение содержимого из середины файла. Возможно, это файл журнала, или вам нужно добавить одну таблицу из середины файла резервной копии MySQL, как я сделал.
Чтобы выяснить номера строк, простая команда grep -n выполнила работу (аргумент -n выводит номера строк). Это позволило легко понять, что мне нужно извлечь.
grep -n wp_posts howtogeekdb010114.bak | более
В результате получается что-то вроде этого, которое показывает номера строк в левой части вывода. Ввод всего в «больше» гарантирует, что вы сможете увидеть первую строку без прокрутки. Теперь у вас есть номер строки для начала и, вероятно, тот, который заканчивается.
4160: - Структура таблицы для таблицы `wp_posts` 4163: DROP TABLE, ЕСЛИ СУЩЕСТВУЕТ `wp_posts`; 4166: CREATE TABLE `wp_posts` ( 4203: - Сброс данных для таблицы `wp_posts` 4206: LOCK TABLES `wp_posts` WRITE; 4207:/*! 40000 ALTER TABLE `wp_posts` DISABLE KEYS * /; 4208: INSERT INTO `wp_posts` VALUES (1,2, '2006-09-11 05:07:23', '2006-09-11
Конечно, вы можете просто перенаправить вывод из grep в другой файл, например так:
grep keyword filename.txt> outputfile
В моем случае это не сработало, потому что по какой-то причине я не смог импортировать полученную резервную копию. Итак, я нашел другой способ извлечь строки с помощью sed, и этот метод сработал.
sed -n '4160,4209p' howtogeekdb0101140201.bak> выходной файл
В основном, синтаксис такой: убедитесь, что вы используете аргумент -n и включаете «p» после номера второй строки.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' имя_файла> имя выходного файла
Какими еще способами вы можете вытащить определенные строки в середине файла? Вы можете использовать команду «head» с аргументом + number, чтобы просто прочитать первые x строк файла, а затем использовать tail для извлечения этих строк. Не лучший вариант, много накладных расходов. Более простой вариант? Вы можете использовать команду split, чтобы превратить файл в несколько файлов прямо по желаемому номеру строки, а затем извлечь строки, используя голову или хвост.
Или вы можете просто использовать sed.