dポイントプレゼントキャンペーン実施中!

1 echo "00012345" | sed -e "s/[0]*\(1234\)/\1/"
と入れた時、想定したのは1234なのですが、
実際には12345と出力されます。

2 echo "00012345" | sed -e "s/[0]*\(1234\)5/\1/"
と打つと1234になります。

グループ化してるので、1234だけが抽出されると思ったのですが、
なぜ1の時は5まで出力されるのでしょうか

ちなみにgrepを使って検索すると
echo "00012345" | egrep -o "(1234)"
1234と出て、グループ化でマッチングした物しか出ません

A 回答 (1件)

sはマッチした部分を置き換えるものです。


[0]*\(1234\) で 0001234 がマッチし、そのマッチした部分を \1で置き換えます。
5は対象外なのでそのままです。

egrep -o "(1234)"
は、 -o が「マッチした箇所だけ出力する」というオプションだからです。
グループ化は関係ありません。
egrep -o "1234"
でも同じ結果になります。
    • good
    • 1
この回答へのお礼

分かりやすい解答ありがとうございました

お礼日時:2013/11/13 00:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!