Format stdin in bash
Ich habe ein multi-line string kommt aus einem anderen Programm, dass ich konvertieren möchten, um einen SQL-Befehl. Ich hatte gehofft, dass printf die mir helfen könnten, aber es scheint nicht zu funktionieren:
echo -e '1\n2\n3'|printf ("WÄHLEN Sie %s IN der Tabelle MyTable'
Ich hoffte, zu sehen:
WÄHLEN Sie " 1 2 3' IN 'MyTable'
Aber ich bekam:
WÄHLEN Sie IN der Tabelle MyTable
Wie bekomme ich die %s zu Lesen von stdin?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden xargs zu verwandeln stdin auf die Programm-Argumente:
Geben diesem einen Versuch:
Können Sie nicht. Die
printf
shell-Befehl-Formate, die seine Argumente nicht-standard-Eingang, damit das, was Sie tun können, ist stellen Sie die Ausgabe eines Befehls als ein einziges argument:Bearbeiten: eine Lösung in Awk
Lasse ich das "stripping" final newline als übung für den Leser. Wenn Sie wollen, etwas zu tun mehr Komplex in der
printf
haben, dann haben Sie zu kommen mit ein paar mehr kreative awk-Skript.printf
- Nutzung in Ihrem Beispiel mitawk
. Ich werde es auf meine Antwort.s="$(cat)";"$@" "$s"
und verwenden Sie es alsprintf '%s\n' 1 2 3 | 1args printf "SELECT '%s' INTO MyTable\n"
zu erhalten Ihre Bestellung. Aber ich bin nicht ganz überzeugt, seine Nützlichkeit. Es gibt ein limit für die Größe von Argumenten (je nach OS), das wird begrenzen, wie viel von stdin, Sie könnte das Zeugs in ein argument.