続きです。
前回の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文ではなかったので、どこかで条件を間違えたのでしょう。
つづく
コメント