Mit sed:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Innerhalb des Befehls sed ^
stimmt das Zeichen mit dem Text überein , der mit beginnt $prefix
, und der nachfolgende $
Text stimmt mit dem Text überein, der mit endet $suffix
.
Adrian Frühwirth macht einige gute Punkte in den Kommentaren unten, aber sed
für diesen Zweck kann sehr nützlich sein. Die Tatsache, dass der Inhalt von $ Präfix und $ Suffix von sed interpretiert wird, kann entweder gut oder schlecht sein - solange Sie darauf achten, sollte es Ihnen gut gehen. Das Schöne ist, Sie können so etwas tun:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Das ist vielleicht das, was Sie wollen, und es ist sowohl schicker als auch leistungsfähiger als die Substitution von Bash-Variablen. Wenn Sie sich daran erinnern, dass mit großer Kraft große Verantwortung verbunden ist (wie Spiderman sagt), sollte es Ihnen gut gehen.
Eine kurze Einführung in sed finden Sie unter http://evc-cit.info/cit052/sed_tutorial.html
Ein Hinweis zur Shell und zur Verwendung von Strings:
Für das gegebene Beispiel würde auch das Folgende funktionieren:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... aber nur weil:
- echo ist es egal, wie viele Zeichenfolgen in seiner Argumentliste enthalten sind, und
- Das Präfix $ und das Suffix $ enthalten keine Leerzeichen
Es wird im Allgemeinen empfohlen, eine Zeichenfolge in der Befehlszeile in Anführungszeichen zu setzen, da sie dem Befehl auch dann als einzelnes Argument angezeigt wird, wenn sie Leerzeichen enthält. Wir zitieren $ Präfix und $ Suffix aus dem gleichen Grund: Jeder Bearbeitungsbefehl an sed wird als eine Zeichenfolge übergeben. Wir verwenden doppelte Anführungszeichen, weil sie eine variable Interpolation ermöglichen. Hätten wir einfache Anführungszeichen verwendet, hätte der Befehl sed ein Literal erhalten, $prefix
und $suffix
das ist sicherlich nicht das, was wir wollten.
Beachten Sie auch meine Verwendung von einfachen Anführungszeichen beim Festlegen der Variablen prefix
und suffix
. Wir möchten sicher nicht, dass irgendetwas in den Zeichenfolgen interpretiert wird, also zitieren wir sie einfach, damit keine Interpolation stattfindet. Auch in diesem Beispiel ist dies möglicherweise nicht erforderlich, aber es ist eine sehr gute Angewohnheit, sich darauf einzulassen.