String-Ersetzungen: alle Vorkommen

11

Eine einfache Frage, aber ich kann die Antwort nicht finden. die zsh dokumentation überwältigt mich :-(

function z ()
{
  echo ${1:s/the/THE}
}

$ z thethethe
THEthethe

...

Wie kann ich alle "the" durch "THE" ersetzen lassen, nicht nur das erste Mal? Mit zsh sind es die einfachsten Dinge, für die es am schwierigsten zu sein scheint, Beispiele zu finden.

Ray Andrews
quelle

Antworten:

21

Dies ist ein Verlaufserweiterungsmodifikator. Fügen Sie den gModifikator daher unmittelbar zuvor hinzu s.

echo ${1:gs/the/THE}

Verwenden Sie alternativ die Parametererweiterungssyntax, bei der ein doppelter Schrägstrich eine globale Substitution bedeutet. In diesem Fall ist der s//nachfolgende Teil ein Platzhaltermuster, während die Ersetzung der Verlaufserweiterung eine Literalzeichenfolge erfordert.

echo ${1//the/THE}
Gilles 'SO - hör auf böse zu sein'
quelle
6

Dies sollte den Job machen:

VARIABLE=thethethe
echo ${VARIABLE//the/THE}
THETHETHE
Chaos
quelle
3

Daher musste es einfach sein:

echo ${1//the/THE}

... der doppelte Schrägstrich macht es und Sie können nicht mit ": s" herumalbern.

Übrigens möchte ich mich bei den 'StackExchange'-Sites für das Vorhandensein bedanken. Von allen Millionen Orten, an denen man eine Frage stellen könnte, sind diese bei weitem die besten - man bekommt nicht nur fast immer Antworten, sondern diese Antworten sind ausnahmslos von höchster Qualität.

Ray Andrews
quelle
1

// funktioniert perfekt, wenn Sie nur versuchen, ein bestimmtes Wort durch Großbuchstaben zu ersetzen, während der Rest unberührt bleibt. Wenn Sie versuchen, alles in Großbuchstaben umzuwandeln, können Sie ": u" für die Variable verwenden

SOME_ENV_VALUE='thethethe'
echo $SOME_ENV_VALUE:u // outputs: THETHETHE

Sie können überprüfen, welche Modifikatoren im Handbuch zur Erweiterung und Ersetzung von zsh verfügbar sind

man zshexpn
Bradynpoulsen
quelle