実はもっと簡単なgrep指定がありました。こちらを使います。
takk@deb9:~/tmp/grep-3.1/src$ grep -A1 "^......case.*'.'" grep.c case 'A': context_length_arg (optarg, &out_after); -- case 'B': context_length_arg (optarg, &out_before); -- 省略 -- case 'Z': filename_mask = 0; -- case 'z': eolbyte = '\0'; takk@deb9:~/tmp/grep-3.1/src$
並び替えると見やすくなります。
takk@deb9:~/tmp/grep-3.1/src$ grep -A1 "^......case.*'.'" grep.c | tr -d '\n' | perl -pe 's/\bcase/\ncase/g' case 'A': context_length_arg (optarg, &out_after);-- case 'B': context_length_arg (optarg, &out_before);-- case 'C': /* Set output match context, but let any explicit leading or-- case 'D': if (STREQ (optarg, "read"))-- case 'E': matcher = setmatcher ("egrep", matcher);-- case 'F': matcher = setmatcher ("fgrep", matcher);-- case 'P': matcher = setmatcher ("perl", matcher);-- case 'G': matcher = setmatcher ("grep", matcher);-- case 'X': /* undocumented on purpose */ matcher = setmatcher (optarg, matcher);-- case 'H': with_filenames = true;-- case 'I': binary_files = WITHOUT_MATCH_BINARY_FILES;-- case 'T': align_tabs = true;-- case 'U': if (O_BINARY)-- case 'u': /* Obsolete option; it has no effect. FIXME: Diagnose use of-- case 'V': show_version = true;-- case 'a': binary_files = TEXT_BINARY_FILES;-- case 'b': out_byte = true;-- case 'c': count_matches = true;-- case 'd': directories = XARGMATCH ("--directories", optarg,-- case 'e': cc = strlen (optarg);-- case 'f': if (STREQ (optarg, "-"))-- case 'h': with_filenames = false;-- case 'i': case 'y': /* For old-timers . . . */ match_icase = true;-- case 'L': /* Like -l, except list files that don't contain matches.-- case 'l': list_files = LISTFILES_MATCHING;-- case 'm': switch (xstrtoimax (optarg, 0, 10, &max_count, ""))-- case 'n': out_line = true;-- case 'o': only_matching = true;-- case 'q': exit_on_match = true;-- case 'R': fts_options = basic_fts_options | FTS_LOGICAL;-- case 'r': directories = RECURSE_DIRECTORIES;-- case 's': suppress_errors = true;-- case 'v': out_invert = true;-- case 'w': wordinit ();-- case 'x': match_lines = true;-- case 'Z': filename_mask = 0;-- case 'z': eolbyte = '\0';takk@deb9:~/tmp/grep-3.1/src$
各オプションとフラグの関係がすぐに分かるようになりました。
一つピックアップして、manと見比べます。
takk@deb9:~/tmp/grep-3.1/src$ !! | shuf | head -1 grep -A1 "^......case.*'.'" grep.c | tr -d '\n' | perl -pe 's/case/\ncase/g' | shuf | head -1 case 'c': count_matches = true;-- takk@deb9:~/tmp/grep-3.1/src$
man grepの -cの説明はこのようになっています。
-c, --count 通常の出力はせず、各入力ファイルについてマッチした行数を表示しま す。 -v, --invert-match オプション (上記参照) と共に指定した場合 は、 マッチしなかった行数を表示します。 (-c オプションは POSIX で指定されています)
-cオプションのフラグは、count_matchesです。それはそれで分かりやすいのですが、ロングオプションの–countの名前を合わせても良かったのでは? と思ってしまいました。
つづく
コメント