sed キャプチャグループが機能しない

sed キャプチャグループが機能しない

フォーマットされた文字列があります[0-9]+\.[0-9]+\.[0-9]。最初、2番目、3番目の数字を別々に抽出する必要があります。私が理解したのは、キャプチャグループがこれを行うことができることです。これを使用して、sed "s/\([0-9]*\)/\1/g最初の数字、sed "s/\([0-9]*\)/\2/g2番目の数字、sed "s/\([0-9]*\)/\3/g3番目の数字を取得できるはずです。しかし、すべての場合、私は完全な文字列を取得します。なぜこれが起こるのですか?

ベストアンサー1

入力した例がないと完全な回答はできませんが、グループキャプチャの理解が間違っていることをお伝えします。順番に使用せずに、同じ代替演算子の左側にある正規表現を参照するだけです。たとえば、キャプチャすると、/(foo)(bar)(baz)/will foobe \1barwill be、\2will bazbe となります\3s/(foo)/\1/; s/(bar)/\2/2番目のs///呼び出しにはキャプチャグループが1つしかないため、定義されていないため、\2これを行うことはできません。

したがって、3 つの数値セットをキャプチャするには、次の手順を実行する必要があります。

sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1 : \2 : \3/'

または、読みやすくするには、次の手順を実行します。

sed -E 's/([0-9]*)\.([0-9]*)\.([0-9]*)/\1 : \2 : \3/'

おすすめ記事