13

IP アドレスの 3 番目の部分を置き換えるために、次の sed ワンライナーを書きました。

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

192.168.0.1
192.168.15.1

遅延させたいので、拡張された正規表現を使用して192.168.0置き換えますが、「-r」オプションを指定すると、次のエラーが発生します。192.168.15??

$ 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

ここで何が起こっているのか、またキャプチャ グループを使用しているときに式を遅延させる方法を説明できますか?

注:さまざまなアプローチを使用して例を実現できます。私の質問は、例を解決する方法ではありません。拡張された正規表現とキャプチャ グループで sed を使用することに興味があります。

4

1 に答える 1

12

([0-9]*)シンボルのグループに一致する有効なステートメントであるため、中かっこをエスケープする必要はありません。

$> echo "192.168.0.1" | sed -r 's/192\.168\.[0-9]*\.([0-9]*)/192\.168\.15\.\1/g'
192.168.15.1
于 2012-10-29T20:19:55.733 に答える