geist_der_foren Geschrieben 8. März 2004 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 ???
nic_power Geschrieben 8. März 2004 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
geist_der_foren Geschrieben 8. März 2004 Autor Geschrieben 8. März 2004 Ich verstehe nicht so ganz wie ich das bewerkstelligen soll, kannst du mir mal bitte ein Beispiel posten ?
nic_power Geschrieben 8. März 2004 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
geist_der_foren Geschrieben 8. März 2004 Autor Geschrieben 8. März 2004 Mein Prob ist, es soll dynamisch gehen ... Es kann ja unendlich viele "" oder \\ haben ... weist wie ich mein ?
Schlaubi Geschrieben 8. März 2004 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...
nic_power Geschrieben 8. März 2004 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
geist_der_foren Geschrieben 9. März 2004 Autor 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 ...
Schlaubi Geschrieben 9. März 2004 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...
nic_power Geschrieben 9. März 2004 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
geist_der_foren Geschrieben 9. März 2004 Autor 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 ...
geist_der_foren Geschrieben 12. März 2004 Autor 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden