Mit Regex suchen, aber nur Teil des Regex ersetzen


Mr. Brooks

Grünschnabel
Hallo,

ich suche eine Möglichkeit nach bestimmten Regex in einem Textdokument zu suchen, aber nur einen bestimmten Teil des Suchergebnisses zu ersetzen. Ich suche beispielsweise nach

Code:
[a-z][1-3][a-z]

das heißt ein beliebiger Kleinbuchstabe, gefolgt von einer Zahl zwischen 1 und 3, gefolgt wieder von einem beliebigen Kleinbuchstaben.

Es soll aber nur die Zahl ersetzt werden, nicht die Buchstaben. Die Buchstaben sind aber wichtig um die Suchergebnisse eindeutig zu finden. Ist das möglich? Ich verwendet Linux und als Editor meist Mousepad oder Kate. Mousepad kann aber keine Regex.
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

das kannst du mit Matching Groups erreichen:
Code:
([a-z])([1-3])([a-z])

\1 => erster Buchstabe
\2 => Zahl
\3 => zweiter Buchstabe

Mit diesen "Platzhaltern" kannst du dann beim ersetzen arbeiten. Wie das dann konkret aussieht hängt von der Bibliothek / Programmiersprache / Anwendung ab.

Mit sed zum Beispiel (ungetestet, vorallem escaping):
Bash:
sed -i 's/([a-z])([1-3])([a-z])/\142\3/' datei.txt
Grüsse,
BK
 

HonniCilest

Erfahrenes Mitglied
Mir persönlich sind Matching Groups nicht so geläufig, mir fällt da eher das Stichwort "look-around assertions" ein.

Code:
'egwtA2fsglwg1gg5kl3R' -creplace '(?<=[a-z])[1-3](?=[a-z])', '#'

Code:
egwtA2fsglwg#gg5kl3R
 

Neue Beiträge