Hallo, ich versuche gerade folgendes mit gawk innerhalb eines Shell-Scriptes zu lösen: echo | gawk '{ out = "xxx"; print "('" out "'),"; Erwarten (bzw. erreichen) würde ich folgendes: ('xxx'), Effektiv wirds aber: ( out ), Noch lustiger wirds wenn ich es aus nem Shell-Skript raus ausführe Zum testen das ganze in xxx.sh eintragen uns ausführen. Ich quote mich jetzt schon ne ganze Weile zu Tode, hingekriegt habe ichs nicht. Weiß einer evtl. wie ich das quoten muss? Bitte auch mit ner erklärung dazu, warum (will ja nicht blöd sterben...) Gruß Daniel -- Daniel Spannbauer Systemadministration marco Systemanalyse und Entwicklung GmbH Tel +49 8333 9233-27 Fax -11 Rechbergstr. 4-6, D 87727 Babenhausen Mobil +49 171 4033220 http://www.marco.de/ Email ds@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Daniel Spannbauer schrieb:
Hallo,
ich versuche gerade folgendes mit gawk innerhalb eines Shell-Scriptes zu lösen:
echo | gawk '{ out = "xxx"; print "('" out "'),";
Erwarten (bzw. erreichen) würde ich folgendes: ('xxx'),
Effektiv wirds aber: ( out ),
Noch lustiger wirds wenn ich es aus nem Shell-Skript raus ausführe Zum testen das ganze in xxx.sh eintragen uns ausführen.
Ich quote mich jetzt schon ne ganze Weile zu Tode, hingekriegt habe ichs nicht.
Weiß einer evtl. wie ich das quoten muss? Bitte auch mit ner erklärung dazu, warum (will ja nicht blöd sterben...)
Hi, irgendwie wird halt das ' von der Shell oder von awk interpretiert Zwischen 2 ' kann man ja auch Variablen aus der zugrunde liegenden Shell in awk verarbeiten, also ist das schwierig zu trennen. Mein Ausweg ist hier meistens, die ASCII Zeichen direkt zu verwenden: echo | gawk '{ out = "xxx"; printf("(\x27%s\x27),\n",out);}' Vielleicht hilfts ja :) ASCII Tabelle: <http://www.ascii-tabelle.com/ascii-tabelle-hexadezimal.html> -- Gruss Bernd -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Fri, 29 May 2015, Bernd Obermayr schrieb:
Mein Ausweg ist hier meistens, die ASCII Zeichen direkt zu verwenden: [..] ASCII Tabelle: <http://www.ascii-tabelle.com/ascii-tabelle-hexadezimal.html>
RTFM: man ascii (gibt auch iso8859* und utf8, letzteres ohne Tabelle allerdings) -dnh -- Hochwertige Dokumente muessen in der heutigen Zeit auf auf preiswerter Hardware zu Erstellen sein. Nicht jeder kann sich einen teueren Rechner fuer 100 Euro oder mehr leisten. -- Uwe Borchert in dctt -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
David Haller schrieb:
Hallo,
Am Fri, 29 May 2015, Bernd Obermayr schrieb:
Mein Ausweg ist hier meistens, die ASCII Zeichen direkt zu verwenden: [..] ASCII Tabelle: <http://www.ascii-tabelle.com/ascii-tabelle-hexadezimal.html>
RTFM: man ascii
(gibt auch iso8859* und utf8, letzteres ohne Tabelle allerdings)
-dnh
Servus, mir ist die Ansicht im Browser lieber. -------------8<-------------- bernd@burdon:~> echo $LANG de_DE.UTF-8 bernd@burdon:~> man ascii|grep 047 047 39 27 ´ 147 103 67 g bernd@burdon:~> LANG=C bernd@burdon:~> man ascii|grep 047 047 39 27 ' 147 103 67 g bernd@burdon:~> -------------8<-------------- Ich weiss nicht ob das Beispiel richtig angezeigt wird daher: Bei LANG=de_DE.UTF-8 sehe ich im Terminal einen backtick: ´ Damit hätte ich also den ' nicht gefunden :) -- Gruss Bernd -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, On Fri, 29 May 2015, Bernd Obermayr wrote:
Daniel Spannbauer schrieb:
Hallo,
ich versuche gerade folgendes mit gawk innerhalb eines Shell-Scriptes zu lösen:
echo | gawk '{ out = "xxx"; print "('" out "'),"; irgendwie wird halt das ' von der Shell oder von awk interpretiert Zwischen 2 ' kann man ja auch Variablen aus der zugrunde liegenden Shell in awk verarbeiten, also ist das schwierig zu trennen.
Mein Ausweg ist hier meistens, die ASCII Zeichen direkt zu verwenden:
echo | gawk '{ out = "xxx"; printf("(\x27%s\x27),\n",out);}'
Vielleicht hilfts ja :)
ASCII Tabelle: <http://www.ascii-tabelle.com/ascii-tabelle-hexadezimal.html>
interessanter Ansatz. Bzgl. ASCII Tabelle würde ich aber doch auf "man ascii" verweisen wollen. Linux ist einfach spitze dokumentiert (zumindest war es das bis zur GUI ;) Greetings Daniel -- Mr. Gandhi, what do you think about Western civilization? I think it would be a very good idea. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Fri, 29 May 2015, Daniel Spannbauer schrieb:
ich versuche gerade folgendes mit gawk innerhalb eines Shell-Scriptes zu lösen:
echo | gawk '{ out = "xxx"; print "('" out "'),"; ^ hier beendest du die äußeren '', die den awk-Befehl umschließen.
Erwarten (bzw. erreichen) würde ich folgendes: ('xxx'),
Effektiv wirds aber: ( out ),
Wie üblich hilft 'set -x' beim Verständnis. $ set -x $ gawk 'BEGIN { out = "xxx"; print "('" out "')"};' + gawk 'BEGIN { out = "xxx"; print "( out )"};' ( out )
Noch lustiger wirds wenn ich es aus nem Shell-Skript raus ausführe Zum testen das ganze in xxx.sh eintragen uns ausführen.
Ich quote mich jetzt schon ne ganze Weile zu Tode, hingekriegt habe ichs nicht.
Ist auch nervig, wenn man das so mit den '' macht: gawk 'BEGIN{ out = "xxx"; print "('"'"'" out "'"'"')";}' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^ [1] ^^^ ^^^ [2] [1] markiert die Bereiche, in denen die '' die für die shell gelten. [2] hier maskieren die "" das ' für die shell. $ gawk 'BEGIN{ out = "xxx"; print "('"'"'" out "'"'"')";}' + gawk 'BEGIN{ out = "xxx"; print "('\''" out "'\'')";}' ('xxx') Statt bei [2] jew. "'" zu nehmen geht also auch \' aber eben auf Shell-Ebene, nicht _im_ gawk. Anders geschrieben: gawk shell 'BEGIN{ out = "xxx"; print "(' awk-Argument=BEGIN{ ..."( "'" shell -> awk-Argument=' '" out "' awk-Argument=" out " "'" shell -> awk-Argument=' ')";}' awk-Argument=)";} bzw. dein Original: gawk 'BEGIN { out = "xxx"; print "(' awk-Argument=BEGIN{..."( " out " shell -> awk-Argument=\ out \ ')"};' awk-Argument=)"}; Lesbarer wird das ganze, wenn du außen "" nimmst, denn die " lassen sich innen relativ lesbar escapen: $ gawk "BEGIN{ out = \"xxx\"; print \"('\" out \"')\";}" + gawk 'BEGIN{ out = "xxx"; print "('\''" out "'\'')";}' ('xxx') oder besser: $ gawk "BEGIN{ out = \"xxx\"; printf(\"('%s')\n\", out);}" + gawk 'BEGIN{ out = "xxx"; printf("('\''%s'\'')\n", out);}' ('xxx') oder du schreibst das ganze in ne Datei: $ cat tmp.awk out = "xxx"; print "('" out "')"; $ echo | gawk -f tmp.awk ('xxx') oder auch via stdin, wenn man das nicht anderweitig braucht: $ cat<<'EOF'|gawk -f- BEGIN{ out = "xxx"; print "('" out "')";} EOF Auch hier geht wieder 'printf' statt print. HTH, -dnh -- Gib einem Hungrigen einen Fisch, und er ist fuer einen Tag satt. Zeig ihm, wie man angelt, und er poebelt Dich an, dass er besseres zu tun haette, als Schnuere ins Wasser haengen zu lassen. -- David Kastrup in de.comp.text.tex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Danke an alle, jetzt ists verständlicher :) Gruß Daniel Am 05/29/2015 um 04:27 PM schrieb Daniel Spannbauer:
Hallo,
ich versuche gerade folgendes mit gawk innerhalb eines Shell-Scriptes zu lösen:
echo | gawk '{ out = "xxx"; print "('" out "'),";
Erwarten (bzw. erreichen) würde ich folgendes: ('xxx'),
Effektiv wirds aber: ( out ),
Noch lustiger wirds wenn ich es aus nem Shell-Skript raus ausführe Zum testen das ganze in xxx.sh eintragen uns ausführen.
Ich quote mich jetzt schon ne ganze Weile zu Tode, hingekriegt habe ichs nicht.
Weiß einer evtl. wie ich das quoten muss? Bitte auch mit ner erklärung dazu, warum (will ja nicht blöd sterben...)
Gruß
Daniel
-- Daniel Spannbauer Systemadministration marco Systemanalyse und Entwicklung GmbH Tel +49 8333 9233-27 Fax -11 Rechbergstr. 4-6, D 87727 Babenhausen Mobil +49 171 4033220 http://www.marco.de/ Email ds@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (4)
-
Bernd Obermayr
-
Daniel Lord
-
Daniel Spannbauer
-
David Haller