Как удалить строки из середины файла с помощью терминала Linux
Когда вы управляете своими собственными серверами, одна из вещей, которые вам приходится выполнять на полурегулярной основе, - это извлечение содержимого из середины файла. Может быть, это файл журнала, или вам нужно добавить одну таблицу из середины файла резервной копии MySQL, как я сделал.
Чтобы выяснить номера строк, простая команда grep -n выполнила работу (аргумент -n выводит номера строк). Это позволило легко понять, что мне нужно извлечь.
grep -n wp_posts howtogeekdb010114.bak | Больше
В результате получается что-то вроде этого, которое показывает номера строк в левой части вывода. Ввод всего в «больше» гарантирует, что вы можете увидеть первую строку без прокрутки. Теперь у вас есть номер строки для начала и, вероятно, тот, который заканчивается.
4160: - Структура таблицы для таблицы 'wp_posts' 4163: DROP TABLE ЕСЛИ СУЩЕСТВУЕТ 'wp_posts'; 4166: СОЗДАТЬ ТАБЛИЦУ 'wp_posts' (4203: - Сброс данных для таблицы 'wp_posts' 4206: ЗАБЛОКИРОВАТЬ ТАБЛИЦЫ 'wp_posts' ЗАПИСЬ; 4207: / *! 40000 ALTER TABLE 'wp_posts' ОТКЛЮЧИТЬ КЛЮЧИ * /; 4208: ВСТАВИТЬ ВСТРОЕННЫЕ 'wp_pos 'VALUES (1,2,' 2006-09-11 05:07:23 ',' 2006-09-11
Конечно, вы можете просто передать вывод grep в другой файл, например так:
grep ключевое слово filename.txt> выходной файл
В моем случае это не сработало, потому что по какой-то причине я не смог импортировать полученную резервную копию. Итак, я нашел другой способ извлечь строки с помощью sed, и этот метод работал.
sed -n '4160,4209p' howtogeekdb0101140201.bak> выходной файл
По сути, синтаксис такой: убедитесь, что вы используете аргумент -n и включаете «p» после номера второй строки.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' имя_файла> имя выходного файла
Какими еще способами можно вытащить определенные строки в середине файла? Вы можете использовать команду «head» с аргументом + number, чтобы просто прочитать первые x строк файла, а затем использовать tail для извлечения этих строк. Не лучший вариант, много накладных расходов. Более простой вариант? Вы можете использовать команду split, чтобы превратить файл в несколько файлов прямо по желаемому номеру строки, а затем извлечь строки, используя голову или хвост.
Или вы можете просто использовать Sed.