Как я могу извлечь заранее определенный диапазон строк из текстового файла в Unix? - PullRequest
470 голосов
/ 17 сентября 2008

У меня есть дамп SQL из ~ 23000 строк, содержащий данные из нескольких баз данных. Мне нужно извлечь определенный раздел этого файла (то есть данные для одной базы данных) и поместить его в новый файл. Я знаю номера начала и конца строки нужных мне данных.

Кто-нибудь знает команду Unix (или серию команд), чтобы извлечь все строки из файла, скажем, между строками 16224 и 16482, а затем перенаправить их в новый файл?

Ответы [ 22 ]

0 голосов
/ 06 октября 2016

Я думаю, что это может быть полезным решением. Если имя таблицы «person», вы можете использовать sed, чтобы получить все строки, необходимые для восстановления таблицы.

sed -n -e '/DROP TABLE IF EXISTS.*`person `/,/UNLOCK TABLES/p' data.sql  > new_data.sql

На основании этого ответа , где отсутствует таблица «DROP TABLE IF EXIST» для восстанавливаемой таблицы, и вам необходимо удалить несколько строк в нижней части нового файла, прежде чем использовать его, чтобы предотвратить удаляя следующую таблицу.

Подробную информацию также можно найти здесь

0 голосов
/ 10 декабря 2015

-n в приеме ответов работает. Вот другой способ, если вы склонны.

cat $filename | sed "${linenum}p;d";

Это делает следующее:

  1. передать содержимое файла (или канал в тексте, как вы хотите).
  2. sed выбирает данную строку, печатает ее
  3. d требуется для удаления строк, иначе sed будет считать, что все строки будут в конечном итоге напечатаны. то есть без d вы получите все строки, напечатанные выбранной строкой, напечатанные дважды, потому что у вас есть часть $ {linenum} p, запрашивающая ее печать. Я почти уверен, что -n в основном делает то же самое, что и d.
...