• ベストアンサー

grepについて

またまた質問させていただきます。 grep '\(.\)\1' っていったいどういうことを しているのでしょうか?教えてください。

  • janne
  • お礼率16% (11/68)

質問者が選んだベストアンサー

  • ベストアンサー
  • mitsu-s
  • ベストアンサー率25% (7/27)
回答No.3

見づらいので全角で書きます。 ¥(参照文字列¥)という部分、質問では参照文字列は.(ピリオド)になっていますが、このピリオドは任意の文字列を意味します。 で、その後の¥1これは、簡単にいうと「1番目にでてきたカッコの参照文字列と同じ物を前方一致で探す」 事を意味します。 なので、質問のコマンドでは任意の文字列が2つ続く箇所、つまり aa とか 11 とかを探しに行きます。 例えば、質問の内容を grep ’¥(..¥)¥1’ とした場合、2文字の並びが2回続く場所を前方一致で探しに行きます。 abab 5252 とか・・。 こんなところでどうでしょう?

janne
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.2

まず、\(と\)は括った内容をグループ化します。また\数字で表されたオペレータでの参照になります(数値は正規表現内でのカッコのセットを前方から順番に1,2,3・・・と順番に付けられます)。 なので\(.\)\1を解析すると括弧で括られた.で任意の一文字がヒット、その後に続く\1は\(.\)でのマッチ結果を表すので結果として直前の文字と同じ物にマッチします。 この辺を良く知りたいのであれば「詳説 正規表現」という本を一読する事をオススメします。

参考URL:
http://www.amazon.co.jp/exec/obidos/ASIN/4900900451/ref=sr_aps_d_1_2/250-4066937-1847407
janne
質問者

お礼

ありがとうございました。

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

同じ文字が二つ続く個所("xx","11","%%"など)を探します。

janne
質問者

補足

回答ありがとうございます。 えぇっと。。。すいません。 \(.\)\1のどの辺から同じ文字が二個続くところを 探すということがわかるのでしょうか?

関連するQ&A

  • grepについて

    Freebsdにおいてgrepというコマンドがあると思いますが、このgrepで特定の階層にある特定のファイルを探すことはできるのでしょうか? あるファイルの中に存在する、特定の文字などを検索するやり方は分かるのですがファイル名を検索しようとしても、やり方が分からずできません。 それとも、もともとgrepコマンドは、あるファイル内に存在する文字を検索するためのコマンドなのでしょうか?? その辺りも、よく分かりません。 他に、grepはこういう時に便利!!みたいな例があれば教えてくださいませ。 ご回答の程、よろしくお願い致します。

  • vimのgrepの使い方がよくわかりません

    WindowsXPでvimを使い始めたのですが、 grepのやり方がよくわかりません。 一応、unixでgrepやviは最低限レベルでは使えます。 やりたいこととしては、 指定のテキストから、特定の文字列を検索して、 結果を一覧で表示させて、 その中からどれか選んで、その行へジャンプして表示する ということがやりたいです。 で、たぶんgrepでやれるんじゃないかと思って質問しています。 grepに関する簡単な解説を読むと、 (esc)したあと、 :grep hoge hoge.txt でできる、というようなことが書いてあるのですが、 上記で実行すると、 :!findstr /n hoge hoge.txt > c:xxxxxxxx 2>&1 (1 of 1): 1:hoge と出ますが、ここから何をしていいかわかりません。 grepの機能としてはここで終わりなのでしょうか? ここから結果の行へジャンプしたりできないのでしょうか? また、grep対象のファイルって毎回自分で入力するのでしょうか? たとえば、現在編集しているファイルを対象としたい場合、 現在のファイル名となる変数みたいものはあるのでしょうか?

  • grepの使い方(もしくは~)

    恐れ入ります。 grepで検索してみたのですが、よくわかりませんでした。 aaa もしくは bbb を含む という検索はどのように書いたらいいのでしょうか

  • 改行を含んだgrep

    お世話になっております。質問です。 エディタでサクラを使っています。 改行を含んだgrepはできますか? また、以下のやりかたを見ていただいて、良いやり方がありましたらご教示下さい。 ABCを含んだ行を対象に、;(行の終わり)までを抽出したいのです。 現在以下のような条件でgrepしていますが、ABCを含む行全てが抽出されません。 ABC.*(\r\n)*.*; また、以下のようにgrepすると、ABCを含む行全てがgrepされますが、対象ファイル内で改行されていた場合、;まで抽出されず、改行場所までしか抽出されません。 ABC; 詳しい方、宜しくお願い致します。

  • grepについて

    grepについて教えてください。 ログファイルから 09/16~09/21の日付を抜くには どのようにしたらよろしいのでしょうか? egrep "(09/16|09/17|09/18|09/19|09/20|09/21)" ログファイル名 しか思いつきません。 よろしくお願いします。

  • Solarisでのgrepについて

    Solarisのgrepには、前後の行を表示するオプションがないと 思います。 GNUのgrepを使用できない(構成を変更できない)環境ですが、 Linuxのgrepでいう[-A]や[-B]オプションを使用したシェルが 必要になり困っています。 できれば、下記のgrepのように|(パイプ)で挟んで使用している 状態にしたいのですが、コマンドやオプションを教えていただけ ませんか? ***|grep -B1 ***|*** シェルを早急に作成する必要がありますが、知識が乏しく 大変困っています。 よろしくお願いいたします。

  • grepの方法について

    下記のようにgrep結果を取り出したいのですが大量にあります。 検索結果を最新の1つのみ取り出したいのですが、何か良い方法はありますでしょうか? # cat abc.log |grep testword 大量です # cat abc.log |grep -c testword 9100

  • grepで変数が使えない

    HP-UX cshで、grep -v file01 | grep -v file02と 直打ちすると「file01とfile02以外のファイル一覧」 が取得できるのですが 本文にgrep -v file01 | grep -v file02と書いた file03を作成し set 変数 = `cat file3`として、ll | $変数 としても同じ結果が得られません。 どこを修正したら良いのでしょうか?よろしくおねがいします。

  • grepの書き方がわかりません。

    Perlの初心者なんですが、以下のようなテーマをもらってプログラムを作っています。  第一引数にディレクトリのパス、第二引数に検索し たいファイル名を指定して第一引数の  パス以下にある全てのディレクトリを検索してファイルがあればそのパスを表示させなさい。 一応できたのですがプログラムの記述の一部がよくわかりません。以下のプログラムは一部です。 local ($dir, $file) = @_; opendir(DIR,$dir) or die @data = readdir(DIR);#ディレクトリの内容を読む closedir(DIR);#ディレクトリを閉じる local @fname = grep {-f "$dir/$_"} @data; local @dname = grep {-d "$dir/$_"} @data; $dir,$fileには第一、第二引数の文字列をいれているのですがそのディレクトリになかにファイル、ディレクトリがないか検索するためgrepを使っています。それで"$dir/$_"の部分の意味がよくわかりません。 この部分は他のサイトであったものを流用しただけなのですがよくわからないまま使ってたまたま動いたから使用しててこのままでは理解していないままなので どうか教えてほしいです。 あともう一点ありましてgrepのところで最初自分で書いた時  local @fname = grep (-f,@data); というように書きました。ファイルが第一引数にあるときは問題なく動作するのですがその下にあるディレクトリにあるとなぜかプログラムが終わりません。 デバッグとして@dataの中身を表示したらそのディレクトリの検索をしてはいるんですが、その中に目当てのファイルがあるはずなのに@dataの中身がからっぽで ファイルがないことになっています。この違いがどうしてもわかりません。  以上の二点がわからないんですがどうかお手数ですがどなたか教えてください。  

    • ベストアンサー
    • Perl
  • grepでの抽出について

    solarisでgrepを使ってログの抽出を行っているのですが、 123のある行を抽出したいとき、grep 123 ファイル名とすると 1234のある行も一緒に抽出されると思います。 これを123のみ抽出させる方法を教えてください。