
Я использую команду piped для переноса большой производственной базы данных с одного хоста на другой с помощью этой команды:
mysqldump <someparams> | pv | mysql <someparams>
И мне нужно извлечь строку 23 (или, скажем, первые X строк) (сохранить в файле или просто в выводе bash) из SQL, передаваемого с одного сервера на другой.
Что я пробовал:
Объединить в выводе
less
, по крайней мере, чтобы увидеть прокрутку вывода, но безуспешноmysqldump <someparams> | pv | mysql <someparams> | less
Читал о
sed
, но мне это не пригодилосьИспользую head для записи в файл, но он пуст
mysqldump <someparams> | pv | mysql <someparams> | head -n 25 > somefile.txt
Единственное, что мне нужно, это то, что я не могу сохранить этот файл .sql.
Есть идеи?
Спасибо
решение1
Сzsh
mysqldump <someparams> |
pv > >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
С bash
(или zsh
):
mysqldump <someparams> |
pv |
tee >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
(хотя следует помнить, что as bash
не ждет этого sed
процесса, и нет гарантии, что он saved-lines-22-to-24.txt
будет завершен к моменту запуска следующей команды в скрипте).
Или вы могли бы sed
написать:
mysqldump <someparams> |
pv |
sed '22,24 w saved-lines-22-to-24.txt' |
mysql <someparams>
Чтобы получить его в качестве вывода, используйте zsh
:
{mysqldump <someparams> |
pv > >(sed '22,24!d' >&3) |
mysql <someparams>} 3>&1
или bash
/ zsh
:
{ mysqldump <someparams> |
pv |
tee >(sed '22,24!d' >&3)
mysql <someparams>
} 3>&1