続きです。
前回のgrep結果。
takk@deb9:~/tmp/grep-3.1/src$ grep "case.*'.'" grep.c | grep -v 'case.*case'
{"ignore-case", no_argument, NULL, 'i'},
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'P':
case 'G':
case 'X': /* undocumented on purpose */
case 'H':
case 'I':
case 'T':
case 'U':
case 'u':
case 'V':
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'h':
case 'i':
case 'y': /* For old-timers . . . */
case 'L':
case 'l':
case 'm':
case 'n':
case 'o':
case 'q':
case 'R':
case 'r':
case 's':
case 'v':
case 'w':
case 'x':
case 'Z':
case 'z':
takk@deb9:~/tmp/grep-3.1/src$
ここから行番号を取得して、ファイルに落とします。
takk@deb9:~/tmp/grep-3.1/src$ grep -n "case.*'.'" grep.c | grep -v 'case.*case' | cut -d: -f1 > filter takk@deb9:~/tmp/grep-3.1/src$
このような行番号の一覧ができました。
takk@deb9:~/tmp/grep-3.1/src$ head filter 460 2465 2469 2473 2479 2488 2492 2496 2500 2504 takk@deb9:~/tmp/grep-3.1/src$
正規表現で先頭で検索できるように修正。
takk@deb9:~/tmp/grep-3.1/src$ sed 's/^/\^/' -i filter takk@deb9:~/tmp/grep-3.1/src$
このファイルをgrepに適用します。
takk@deb9:~/tmp/grep-3.1/src$ head filter ^460 ^2465 ^2469 ^2473 ^2479 ^2488 ^2492 ^2496 ^2500 ^2504 takk@deb9:~/tmp/grep-3.1/src$
nlでgrep.cの行頭に行番号を付与してから、 grepでさきほど作成したfilterで抽出します。
takk@deb9:~/tmp/grep-3.1/src$ nl -ba -nln grep.c | grep -A1 -f filter
460 {"ignore-case", no_argument, NULL, 'i'},
461 {"initial-tab", no_argument, NULL, 'T'},
--
2465 case 'A':
2466 context_length_arg (optarg, &out_after);
--
2469 case 'B':
2470 context_length_arg (optarg, &out_before);
--
2473 case 'C':
2474 /* Set output match context, but let any explicit leading or
--
2479 case 'D':
2480 if (STREQ (optarg, "read"))
--
2488 case 'E':
2489 matcher = setmatcher ("egrep", matcher);
--
2492 case 'F':
2493 matcher = setmatcher ("fgrep", matcher);
--
2496 case 'P':
2497 matcher = setmatcher ("perl", matcher);
--
2500 case 'G':
2501 matcher = setmatcher ("grep", matcher);
--
2504 case 'X': /* undocumented on purpose */
2505 matcher = setmatcher (optarg, matcher);
--
2508 case 'H':
2509 with_filenames = true;
--
2513 case 'I':
2514 binary_files = WITHOUT_MATCH_BINARY_FILES;
--
2517 case 'T':
2518 align_tabs = true;
--
2521 case 'U':
2522 if (O_BINARY)
--
2526 case 'u':
2527 /* Obsolete option; it has no effect. FIXME: Diagnose use of
--
2531 case 'V':
2532 show_version = true;
--
2535 case 'a':
2536 binary_files = TEXT_BINARY_FILES;
--
2539 case 'b':
2540 out_byte = true;
--
2543 case 'c':
2544 count_matches = true;
--
2547 case 'd':
2548 directories = XARGMATCH ("--directories", optarg,
--
2554 case 'e':
2555 cc = strlen (optarg);
--
2568 case 'f':
2569 if (STREQ (optarg, "-"))
--
2601 case 'h':
2602 with_filenames = false;
--
2606 case 'i':
2607 case 'y': /* For old-timers . . . */
2608 match_icase = true;
--
2611 case 'L':
2612 /* Like -l, except list files that don't contain matches.
--
2617 case 'l':
2618 list_files = LISTFILES_MATCHING;
--
2621 case 'm':
2622 switch (xstrtoimax (optarg, 0, 10, &max_count, ""))
--
2633 case 'n':
2634 out_line = true;
--
2637 case 'o':
2638 only_matching = true;
--
2641 case 'q':
2642 exit_on_match = true;
--
2646 case 'R':
2647 fts_options = basic_fts_options | FTS_LOGICAL;
--
2649 case 'r':
2650 directories = RECURSE_DIRECTORIES;
--
2654 case 's':
2655 suppress_errors = true;
--
2658 case 'v':
2659 out_invert = true;
--
2662 case 'w':
2663 wordinit ();
--
2667 case 'x':
2668 match_lines = true;
--
2671 case 'Z':
2672 filename_mask = 0;
--
2675 case 'z':
2676 eolbyte = '\0';
takk@deb9:~/tmp/grep-3.1/src$
460,461行目はcase文ではなかったので、どこかで条件を間違えたのでしょう。
つづく


コメント