grepを読む(その1)


アニメ『ベルゼブブ嬢のお気に召すまま。』
もふもふでかわいいです。
ベルゼブブがとても激務をこなしているとは思えないのですが、そう思わせないのができる人ってことですね。
私もできる人にいつかなりたいです。

grep続きです。

grepの色について、いろいろ埋め込んできましたが、そろそろソースを読み始めようかと思います。prtextがgrepの表示の要ってことで、printf埋め込み前のgrep.c(3.1)を使ってprtextを読んでいきます。
変数や関数の名前の意味を推測していきます。

1292 /* Output the lines between BEG and LIM.  Deal with context.  */
1293 static void
1294 prtext (char *beg, char *lim)

引数のbeg、limとは何でしょう。
prtextを使用しているソースを確認してみましょう。

1409           char *prbeg = out_invert ? p : b;
1410           char *prend = out_invert ? b : endp;
1411           prtext (prbeg, prend);

使用されている変数名はprbegとprendです。
begin~endってことですね。
つまりbegはbeginの略です。

となると、limは、limitやlimitterといったところでしょう。

続いてこちら。

1296   static bool used;     /* Avoid printing SEP_STR_GROUP before any output.

usedとは実に簡単な名前ですが、何がusedなんでしょう。この関数(prtext)がusedなのか。コメントでは、出力の前のSEP_STR_GROUPの表示を中止するとあります。
では、SEP_STR_GROUPとは何なのか。

56行目に定義されています。

  54 enum { SEP_CHAR_SELECTED = ':' };
  55 enum { SEP_CHAR_REJECTED = '-' };
  56 static char const SEP_STR_GROUP[] = "--";

セパレータとして文字列を定義しているんですね。

続いてこの行。

1297   char eol = eolbyte;

eolなので、End of Lineですね。eolbyteということは行末の1Byteの文字でしょうか。
grep.c内を、eolbyteで検索してみます。

takk@deb9:~/tmp/grep-3.1/src$ grep -n 'eolbyte\>.*=' grep.c
2429:  eolbyte = '\n';
2676:        eolbyte = '\0';
takk@deb9:~/tmp/grep-3.1/src$

行末の1Byte、改行またはNULL文字ってことですね。

つづく

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA