{"id":19363901,"url":"https://github.com/muranoya/tkgrep","last_synced_at":"2026-04-24T12:03:37.489Z","repository":{"id":150465983,"uuid":"153917925","full_name":"muranoya/tkgrep","owner":"muranoya","description":"C/C++ Token grep","archived":false,"fork":false,"pushed_at":"2018-10-25T00:15:22.000Z","size":57,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-27T11:48:25.157Z","etag":null,"topics":["c","cpp","developer-tools","grep","grep-like","grep-search","libclang"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/muranoya.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-20T15:08:19.000Z","updated_at":"2018-11-04T14:19:34.000Z","dependencies_parsed_at":"2023-05-18T09:15:44.835Z","dependency_job_id":null,"html_url":"https://github.com/muranoya/tkgrep","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/muranoya/tkgrep","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muranoya%2Ftkgrep","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muranoya%2Ftkgrep/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muranoya%2Ftkgrep/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muranoya%2Ftkgrep/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/muranoya","download_url":"https://codeload.github.com/muranoya/tkgrep/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muranoya%2Ftkgrep/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32222483,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T10:26:35.452Z","status":"ssl_error","status_checked_at":"2026-04-24T10:25:27.643Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cpp","developer-tools","grep","grep-like","grep-search","libclang"],"created_at":"2024-11-10T07:35:48.217Z","updated_at":"2026-04-24T12:03:37.461Z","avatar_url":"https://github.com/muranoya.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tkgrep\ntkgrep is a grep specialized in C/C++ source code. tkgrep is using libclang to parse a source code and find out specify words.\n\n* Regular expression search\n* Search for specific types of tokens\n* Colorize output\n* Recursive grep\n* print with context\n\n# Installation\n\nFirst, install all required dependecies.\n\n```bash\n[sudo] apt-get install build-essential libclang-dev llvm-dev\n```\n\nYou will need to manually compile.\n\n```bash\nmake\n```\n\n# Usage\n\nbasic grep of C/C++ source code.\n\n```bash\ntkgrep main src/main.cpp\n```\n\n```\nsrc/main.cpp:370:I\tint main(int argc, char* argv[])\n```\n\nwith colorize output.\n\n```bash\ntkgrep -G main src/main.cpp\n```\n\ndirectory specify.\n\n```bash\ntkgrep -RG Config src\n```\n\n```\nsrc/main.cpp:1:L\t#include \"Config.hpp\"\nsrc/main.cpp:70:I\t        return (target \u0026 Config::TokenKind::Punctuation) == Config::TokenKind::Punctuation;\nsrc/main.cpp:72:I\t        return (target \u0026 Config::TokenKind::Keyword) == Config::TokenKind::Keyword;\nsrc/main.cpp:74:I\t        return (target \u0026 Config::TokenKind::Identifier) == Config::TokenKind::Identifier;\nsrc/main.cpp:76:I\t        return (target \u0026 Config::TokenKind::Literal) == Config::TokenKind::Literal;\nsrc/main.cpp:78:I\t        return (target \u0026 Config::TokenKind::Comment) == Config::TokenKind::Comment;\nsrc/main.cpp:80:I\t        return (target \u0026 Config::TokenKind::Unknown) == Config::TokenKind::Unknown;\nsrc/main.cpp:85:I\t    const std::set\u003cMatchLoc\u003e\u0026 match_lines, const Config\u0026 c) noexcept\nsrc/main.cpp:120:I\t    const CXTranslationUnit\u0026 tu, const CXToken* tokens, unsigned int num_tokens, const Config\u0026 c)\nsrc/main.cpp:193:I\tstatic Config parse_opt(int argc, char* argv[]) noexcept\nsrc/main.cpp:195:I\t    Config c;\nsrc/main.cpp:233:I\t                    c.target |= Config::TokenKind::Punctuation;\nsrc/main.cpp:236:I\t                    c.target |= Config::TokenKind::Keyword;\nsrc/main.cpp:239:I\t                    c.target |= Config::TokenKind::Identifier;\nsrc/main.cpp:242:I\t                    c.target |= Config::TokenKind::Literal;\nsrc/main.cpp:245:I\t                    c.target |= Config::TokenKind::Comment;\nsrc/main.cpp:248:I\t                    c.target |= Config::TokenKind::Unknown;\nsrc/main.cpp:305:I\tstatic void tkgrep_r(const std::string\u0026 filename, const Config\u0026 c) noexcept\nsrc/main.cpp:372:I\t    const Config c = parse_opt(argc, argv);\nsrc/Config.hpp:7:I\tstruct Config {\n```\n\nregex search.\n\n```\ntkgrep -RG '.*Config.*' src\n```\n\n```\nsrc/main.cpp:1:L\t#include \"Config.hpp\"\nsrc/main.cpp:70:I\t        return (target \u0026 Config::TokenKind::Punctuation) == Config::TokenKind::Punctuation;\nsrc/main.cpp:72:I\t        return (target \u0026 Config::TokenKind::Keyword) == Config::TokenKind::Keyword;\nsrc/main.cpp:74:I\t        return (target \u0026 Config::TokenKind::Identifier) == Config::TokenKind::Identifier;\nsrc/main.cpp:76:I\t        return (target \u0026 Config::TokenKind::Literal) == Config::TokenKind::Literal;\nsrc/main.cpp:78:I\t        return (target \u0026 Config::TokenKind::Comment) == Config::TokenKind::Comment;\nsrc/main.cpp:80:I\t        return (target \u0026 Config::TokenKind::Unknown) == Config::TokenKind::Unknown;\nsrc/main.cpp:85:I\t    const std::set\u003cMatchLoc\u003e\u0026 match_lines, const Config\u0026 c) noexcept\nsrc/main.cpp:120:I\t    const CXTranslationUnit\u0026 tu, const CXToken* tokens, unsigned int num_tokens, const Config\u0026 c)\nsrc/main.cpp:193:I\tstatic Config parse_opt(int argc, char* argv[]) noexcept\nsrc/main.cpp:195:I\t    Config c;\nsrc/main.cpp:233:I\t                    c.target |= Config::TokenKind::Punctuation;\nsrc/main.cpp:236:I\t                    c.target |= Config::TokenKind::Keyword;\nsrc/main.cpp:239:I\t                    c.target |= Config::TokenKind::Identifier;\nsrc/main.cpp:242:I\t                    c.target |= Config::TokenKind::Literal;\nsrc/main.cpp:245:I\t                    c.target |= Config::TokenKind::Comment;\nsrc/main.cpp:248:I\t                    c.target |= Config::TokenKind::Unknown;\nsrc/main.cpp:305:I\tstatic void tkgrep_r(const std::string\u0026 filename, const Config\u0026 c) noexcept\nsrc/main.cpp:372:I\t    const Config c = parse_opt(argc, argv);\nsrc/Config.hpp:7:I\tstruct Config {\n```\n\nprint with context.\n\n```\ntkgrep -C 2 main src/main.cpp\n```\n\n```\nsrc/main.cpp:368: \t}\nsrc/main.cpp:369: \t\nsrc/main.cpp:370:I\tint main(int argc, char* argv[])\nsrc/main.cpp:371: \t{\nsrc/main.cpp:372: \t    const Config c = parse_opt(argc, argv);\n```\n\nsearch only comment and literal.\n\n```\ntkgrep -t cl -RG '.*token.*' src\n```\n\n```\nsrc/main.cpp:187:L\t    std::printf(\"  -p: Print all tokens and exit, ignore PATTERN.\\n\");\nsrc/Config.hpp:17:C\t    // target = 0 then all token kind are searched.\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuranoya%2Ftkgrep","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuranoya%2Ftkgrep","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuranoya%2Ftkgrep/lists"}