Командная строка SQLite: как передать вывод в утилиту UNIX?

Командная строка SQLite: как передать вывод в утилиту UNIX?

TheДокументация SQLite для своего клиента командной строки указывает, что можно фильтровать вывод SQLite-запросов через утилиты UNIX:

Режим вывода по умолчанию — «список».
[...]
Режим списка особенно полезен, когда вы собираетесь отправить вывод запроса в другую программу (например, AWK) для дополнительной обработки.

пример вывода, полученного в командной строке SQLite

sqlite> select * from todos;
1|finish reading getting started section of the vim manual
2|finish app feature

затем, если я попробую добавить к команде вертикальную черту, я просто получу новое приглашение

sqlite> select * from todos; | grep vim
...> 

Можно ли отправить вывод в утилиту Unix с помощью канала из командной строки SQLite, или фильтровать вывод SQLite можно только в том случае, если вы на самом деле пишете приложение на языке C и используете библиотеку SQLite C?

решение1

Вы не можете передать вывод из интерактивной сессии SQLite, потому что это не оболочка. |не делает в SQL то, что делает в командной строке. Вероятно, вам нужно сделать что-то похожее на sqlite3 /path/to/mydata.sqlite "select * from todos" | grep vim, которое выполнит SQL и grepвывод, как вы, похоже, пытаетесь сделать.

решение2

Можно отфильтровать вывод запроса с помощью команды, добавив к аргументу .outputсимвол ..once|

.once '|grep vim'
select * from todos;

К сожалению, это не очень хорошо взаимодействует с программами, которые занимают весь ваш терминал, например пейджерами. Для этого я настоятельно рекомендуюлитекли.

https://sqlite.org/cli.html#запись_результатов_в_файл

Связанный контент