- ベストアンサー
grepについて
またまた質問させていただきます。 grep '\(.\)\1' っていったいどういうことを しているのでしょうか?教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
見づらいので全角で書きます。 ¥(参照文字列¥)という部分、質問では参照文字列は.(ピリオド)になっていますが、このピリオドは任意の文字列を意味します。 で、その後の¥1これは、簡単にいうと「1番目にでてきたカッコの参照文字列と同じ物を前方一致で探す」 事を意味します。 なので、質問のコマンドでは任意の文字列が2つ続く箇所、つまり aa とか 11 とかを探しに行きます。 例えば、質問の内容を grep ’¥(..¥)¥1’ とした場合、2文字の並びが2回続く場所を前方一致で探しに行きます。 abab 5252 とか・・。 こんなところでどうでしょう?
その他の回答 (2)
- alfeim
- ベストアンサー率58% (114/195)
回答No.2
まず、\(と\)は括った内容をグループ化します。また\数字で表されたオペレータでの参照になります(数値は正規表現内でのカッコのセットを前方から順番に1,2,3・・・と順番に付けられます)。 なので\(.\)\1を解析すると括弧で括られた.で任意の一文字がヒット、その後に続く\1は\(.\)でのマッチ結果を表すので結果として直前の文字と同じ物にマッチします。 この辺を良く知りたいのであれば「詳説 正規表現」という本を一読する事をオススメします。
質問者
お礼
ありがとうございました。
- ranx
- ベストアンサー率24% (357/1463)
回答No.1
同じ文字が二つ続く個所("xx","11","%%"など)を探します。
質問者
補足
回答ありがとうございます。 えぇっと。。。すいません。 \(.\)\1のどの辺から同じ文字が二個続くところを 探すということがわかるのでしょうか?
お礼
ありがとうございました。