SQLite-Befehlszeile: Wie leiten Sie die Ausgabe an ein UNIX-Dienstprogramm weiter?

SQLite-Befehlszeile: Wie leiten Sie die Ausgabe an ein UNIX-Dienstprogramm weiter?

DerSQLite-Dokumentation für seinen Befehlszeilenclient gibt an, dass es möglich ist, die Ausgabe von SQLite-Abfragen durch UNIX-Dienstprogramme zu filtern:

Der Standardausgabemodus ist „Liste“.
[...]
Der Listenmodus ist insbesondere dann nützlich, wenn Sie die Ausgabe einer Abfrage zur weiteren Verarbeitung an ein anderes Programm (wie etwa AWK) senden möchten.

Beispiel für die Ausgabe einer SQLite-Eingabeaufforderung

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

Wenn ich dann versuche, dem Befehl eine Pipe hinzuzufügen, erhalte ich nur eine neue Eingabeaufforderung

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

Ist es möglich, mithilfe einer Pipe von der SQLite-Befehlszeile aus die Ausgabe an ein Unix-Dienstprogramm zu senden, oder ist es nur möglich, die SQLite-Ausgabe zu filtern, wenn Sie tatsächlich eine C-Anwendung schreiben und die SQLite-C-Bibliothek verwenden?

Antwort1

Sie können die Ausgabe einer interaktiven SQLite-Sitzung nicht weiterleiten, da es sich nicht um eine Shell handelt. |macht in SQL nicht das, was es in einer Befehlszeile macht. Was Sie wahrscheinlich tun müssen, ist etwas Ähnliches wie sqlite3 /path/to/mydata.sqlite "select * from todos" | grep vim, das das SQL ausführt und grepdie Ausgabe so ausgibt, wie Sie es anscheinend versuchen.

Antwort2

Es ist möglich, die Ausgabe einer Abfrage durch einen Befehl zu filtern, indem dem Argument ein vorangestellt wird .outputoder .onceein |.

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

Leider funktioniert dies nicht gut mit Programmen, die Ihr gesamtes Terminal übernehmen, wie z. B. Pager. Dafür empfehle ich dringendlitecli.

https://sqlite.org/cli.html#writing_results_to_a_file

verwandte Informationen