Sed mithilfe von extended-regexp-und capture-Gruppen

Schrieb ich das folgende sed-one-liner für die Ersetzung der 3. Teil einer IP-Adresse.

sed 's/192\.168\.[0-9]*\.\([0-9]*\)/192.168.15.\1/g'

192.168.0.1
192.168.15.1

Ich es machen will, faul ist, so würde es ersetzen 192.168.0 mit 192.168.15 mithilfe ?? die extended-regexp-aber wenn ich liefern die '-r' option bekomme ich folgende Fehlermeldung.

$ sed -r 's/192\.168\.[0-9]*\.\([0-9]*\)/192.168.15.\1/g'
sed: -e expression #1, char 44: invalid reference \1 on `s' command's RHS

Können Sie erklären, was hier Los ist und wie man eine expression faul, während der Verwendung von capture-Gruppen?

Hinweis: ich kann erreichen, das Beispiel mit den vielen verschiedenen Ansätzen, meine Frage ist nicht, wie löst man das Beispiel. Ich bin interessant, in der mit sed mit exteneded regexp und erfassen von Gruppen.

  • N. B. sed -r 's/192\.168(\.[0-9]*){2}/192.168.15\1/g' erreicht das gleiche Ergebnis, die Rückseite Referenz \1 gibt die zweite der beiden (\.[0-9]*){2} und vermeidet die Wiederholung von der regexp.
  • Das ist cleaner auch hilft, wenn was faul Ausdruck sed -r 's/192\.168(\.??[0-9]*){2}/192.168.15\1/g' da es sich mit der trailing - . für den 3 Teil Fall.
Schreibe einen Kommentar