geist_der_foren Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 Hi @all, weiß jemand ob es eine Funktion gibt um Befehle zu maskieren ? Ich hab ein Skript, dem man als Parameter ein befehl mit geben kann z.B.:/usr/sbin/useradd -u 1000 -d /home/username -c "Vorname Name" -m username Dieser Befehl wird in einer schleife gepackt,die dann in einer anderen Datei Befehle generiert. Von der generierten Datei werden dann die die generierten Befehle ausgeführt. Das heißt der oben genannte befehl muss zwei mal Maskiert werden/usr/sbin/useradd -u 1000 -d /home/username -c "\\"\" Vorname Name \\"\"" -m username Gibt es eine Funktion, die ich ihn mein Skript einfügen kann, die mir die Maskierung abnimmt ??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 Hallo, Original geschrieben von geist_der_foren Gibt es eine Funktion, die ich ihn mein Skript einfügen kann, die mir die Maskierung abnimmt ??? Ja, du kannst Dir den String beispielsweise einfach mittels "echo" zusammenbauen und dann in die Datei schreiben oder direkt ausführen. Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geist_der_foren Geschrieben 8. März 2004 Autor Teilen Geschrieben 8. März 2004 Ich verstehe nicht so ganz wie ich das bewerkstelligen soll, kannst du mir mal bitte ein Beispiel posten ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 Hallo, Vielleicht habe ich die Frage auch nicht so ganz verstanden: echo \""\\"\\\"\\\" ergibt beispielsweise "\\"\". Damit kannst Du dir die benötigten Strings zusammenbauen. Sofern Du innerhalb des eingegebenen Strings die Quotes entsprechen ersetzen willst (und den string nicht aus Einzelteilen zusammensetzen kannst), ist beispielswese der sed das geeignete Tool. Damit läßt sich relativ ein Pattern Matching mit der entsprechende Ersetzung erledigen. Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geist_der_foren Geschrieben 8. März 2004 Autor Teilen Geschrieben 8. März 2004 Mein Prob ist, es soll dynamisch gehen ... Es kann ja unendlich viele "" oder \\ haben ... weist wie ich mein ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 das ist sehr schwierig...ob möglich oder nicht, kann ich nicht sagen...aber es ist nicht einfach...weil du kannst nur auf einen pattern eine ersetzung anwenden... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 8. März 2004 Teilen Geschrieben 8. März 2004 Hallo, Original geschrieben von Schlaubi das ist sehr schwierig Warum? mit sed lassen sich auch problemlos alle Vorkommen eines Patterns innerhalb einer Zeile ersetzen: sed 's/n/x/g' ersetzt alle "n" innerhalb einer Zeile durch ein "x". Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geist_der_foren Geschrieben 9. März 2004 Autor Teilen Geschrieben 9. März 2004 Original geschrieben von nic_power Hallo, Warum? mit sed lassen sich auch problemlos alle Vorkommen eines Patterns innerhalb einer Zeile ersetzen: sed 's/n/x/g' ersetzt alle "n" innerhalb einer Zeile durch ein "x". Nic Aber wie soll ich das genau machen ??? Ich verstehe da immer noch nicht :confused: Also gehen wir mal von meinen Beispiel aus. beim aufruft des Skriptes muss man z.B. als Parameter "Name Vorname" mit geben. Jetzt muss "Name Vorname" durch 2 Dateien durch ! Ich muss es folglich dann so maskieren"\\"\"Vorname Name\\"\"" Wie kann ich das jetzt mit dem sed machen ? Da gibt es halt noch ein Prob, es kann ja mal sein, dass ein anders Konstrukt da gestellt werden möchte jetzt mal ein blödes Beispiel ""Name Vorname"" wie maskiere ich das dann ? Das meinte ich mit Dynamisch ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 9. März 2004 Teilen Geschrieben 9. März 2004 Original geschrieben von nic_power Hallo, Warum? mit sed lassen sich auch problemlos alle Vorkommen eines Patterns innerhalb einer Zeile ersetzen: sed 's/n/x/g' ersetzt alle "n" innerhalb einer Zeile durch ein "x". Nic Ja das natürlich ja...sorry ich hab mich falsch Ausgedrückt...ich hatte hier das immer vergessen: Original geschrieben von Schlaubi das ist sehr schwierig...ob möglich oder nicht, kann ich nicht sagen...aber es ist nicht einfach...weil du kannst immer nur auf einen pattern eine ersetzung anwenden... ....egal ob alle patterns ersetzt werden oder nicht... Original geschrieben von geist_der_foren Aber wie soll ich das genau machen ??? Ich verstehe da immer noch nicht :confused: Da gibt es halt noch ein Prob, es kann ja mal sein, dass ein anders Konstrukt da gestellt werden möchte jetzt mal ein blödes Beispiel ""Name Vorname"" wie maskiere ich das dann ? Das meinte ich mit Dynamisch ... und ich hab mir soetwas schon gedacht....wie gesagt das ist schwierig...weil du nicht nur einen Pattern abfangen musst, sondern alle die Möglich sein könnten....und "vorauszuskripten" macht eigentlich keinen Sinn.....wie schon gesagt..mir ist nichts anderes bekannt (bitte schlagt mich wenn das nicht so ist)...außer ein aufwendiges Skript mit allen mögl. Fällen zu erstellen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 9. März 2004 Teilen Geschrieben 9. März 2004 Hallo, schlagen möchte ich Dich natürlich nicht. Aber die regexp auf denen sed basiert sind sehr mächtig. Es ist somit auch möglich, eine Regular Expression zu bilden, die zwar bei einem einfachen Auftreten des " dieses ersetzt, bei einem doppelten Auftreten ("") nur das erste Zeichen (bzw. das letzte, sofern diese paarweise auftreten). Um eine Antwort zu posten, müsste man allerdings die möglichen Kombinationen kennen, die auftreten können (ohne eine genaue Definition des Problems wird es aber generell keine allgemeingültige Lösung geben). Das Hauptproblem bei den regexp ist, dass sie ab einer bestimmten Komplexität dazu neigen, "write only" zu sein. GGf. ist dann ein Ausweichen auf Alternativen wie awk sinnvoll (wg. der Verständlichkeit des Codes). Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geist_der_foren Geschrieben 9. März 2004 Autor Teilen Geschrieben 9. März 2004 Ich mach mal das skript so weit feritg und poste es dann, vielleicht wird dann klar was ich machen will ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geist_der_foren Geschrieben 12. März 2004 Autor Teilen Geschrieben 12. März 2004 Hi, ich hab das endlich mitbekommen ... NAME=\" Vorname Name \" NAME=`echo $NAME | sed s/'"'/'\\\\\\\"\\\"'/g` # Tauscht ' " ' in ' \\\\\\\"\\\" ' /usr/sbin/useradd -u 1000 -d /home/username -c $NAME -m username Danke für die Hilfe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.