Wie verwenden Sie shell-Skript-Variablen als Argumente an sed?
Was ich gerne tun würde, ist so etwas wie die folgenden:
#!/bin/sh
EMAIL="-e 's/SOMETHING//g'"
somecommand | sed "$EMAIL"
Aber ich bekomme die folgende:
sed: -e expression #1, char 2: unknown command: `''
Habe ich versucht, viele Variationen. Ich weiß, dass es nur eine Frage der string-quoting Recht. Der Grund, warum ich möchte, dies zu tun ist zu brechen, eine lange sed-Befehl für bessere Lesbarkeit. Sollte ich einfach ein sed-Skript-Datei (mit der option-f) statt?
UPDATE:
Meinem eigentlichen script ist etwas komplexer:
#!/bin/sh
EMAIL="-e s/SOME THING//g -e s/SOME THING ELSE//g ..."
somecommand | sed "$EMAIL"
Nach dem entfernen der einzelnen Zitate, die ich erhalten:
sed: -e expression #1, char 18: unknown option to `s'
InformationsquelleAutor Swoogan | 2009-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für diese Art von Quotierung problem, eval ist fast immer die Lösung.
Was passiert, ist, dass in Ihrer version die shell aufruft sed mit einem argument (string, "- e 's/ETWAS//g'"), aber Sie wollen die sed zu sein, aufgerufen mit zwei Argumenten ("-a" und "e's/ETWAS//g'"). Eval bewirkt, dass die shell interpretiert den string, wie Sie wollen.
InformationsquelleAutor William Pursell
Übergeben von Argumenten in ein sed-Skript zeigt ein Beispiel der Schrift
grep
.grep ausgeführt werden können,
InformationsquelleAutor nik
Entfernen Sie die Anführungszeichen aus dem Wert des
EMAIL
.InformationsquelleAutor David Z
entfernen Sie die einzelnen Zitate und es sollte gut funktionieren
InformationsquelleAutor ennuikiller
Dieser arbeitete für mich (umgeben Sie mit Anführungszeichen) :
InformationsquelleAutor blispr
Alles in einfache Anführungszeichen ein und lassen Sie die shell-eval es später, wenn es verwendet wird.
InformationsquelleAutor Stephen Paul Lesniewski