Hintergrund
Betrachten Sie den folgenden Text:
There are three types of font families: serif, sans serif, and
teletype. To switch between these families, use <cmd>rm</cmd> for
serif, <cmd>ss</cmd> for sans serif, and <cmd>tt</cmd> for teletype.
Ich möchte ändern <cmd>x</cmd>
zu {{cmd|x}}
, wie folgt:
There are three types of font families: serif, sans serif, and
teletype. To switch between these families, use {{cmd|rm}} for
serif, {{cmd|ss}} for sans serif, and {{cmd|tt}} for teletype.
Problem
Der reguläre Ausdruck für nicht gierige Matches ist schwierig. In vim funktioniert beispielsweise Folgendes nicht:
:%s/<cmd>\(.*\)<\/cmd>.\{-}/{{cmd|\1}}/
Auch nicht das Folgende mit sed:
sed -e "/(<cmd>\(.*\)</cmd>).\{-}/{{cmd|\1}}/"
Die Klammern versuchen, mit den Klammern übereinzustimmen, anstatt den Ausdruck zu gruppieren, um den nicht gierigen Operator von entweder \{-}
oder anzuwenden ?
. Das Ausblenden der Klammer wird für Rückverweise verwendet, die nur für den Textinhalt innerhalb des <cmd>
Tags erforderlich sind .
Frage
Was ist die richtige Syntax, um nicht gierig alle Vorkommen von <cmd>x</cmd>
mit {{cmd|x}}
in einer Datei zu ersetzen ?
Hinweis: Dies ist kein Versuch, HTML mit Regex zu analysieren. ;-)