代码之家  ›  专栏  ›  技术社区  ›  Bojangles Vincent Baillet

从文本文件中检索“TODO”行

  •  2
  • Bojangles Vincent Baillet  · 技术社区  · 14 年前

    我正在用gedit(文本编辑器)编辑一个项目。当我打字时 TODO 它突出显示为黄色,以供将来参考。我有很多这样的 托多 在这附近。

    为了更清楚地说明我需要做什么,有人能告诉我一种提取 托多 一组文件中的行,并将它们放入一个文本文件中,例如, TODOs.txt ?

    我有这样的东西:

    // TODO: Error handling.

    希望把它放在这样的文件中:

    * <file name> <line number> Error handling

    Linux应用程序(cli,gui不介意)是更好的选择,但是一个regex脚本或者其他一些人可以想到的方法是很酷的。

    6 回复  |  直到 6 年前
        1
  •  2
  •   Riley Lark    14 年前

    尝试 grep TODO -rnf * > TODOs.txt

        2
  •  1
  •   DVK    14 年前

    如果您的文件列表(其中包含TODO)存储在一个文件中,称为“file_list.txt”,请运行:

    grep -n `cat file_list.txt` > TODOs.txt
    

    这将检索包含“todo”字符串的所有行的列表,并以文件名和行开头,然后将其存储在todos.txt中。

        3
  •  1
  •   pragmatic    11 年前

    Riley Lark(和Edodoo)的答案可能是最简洁的,但是如果没有文本“todo”显示在输出中,可以使用 ack :

    ack --no-group 'TODO (.*)' --output=' $1' > TODOs.txt
    

    输出:

    lib/Example.pm:102: Move _cmd out into a separate role
    lib/Example.pm:364: Add a filename parameter
    lib/Example2.pm:45: Move comment block to POD format
    

    如果您想要一些稍微不同的格式,然后添加 --no-group 选项将提供:

    lib/Example.pm
    102: Move Move _cmd out into a separate role
    364: Add a filename parameter
    
    lib/Example2.pm
    45: Move comment block to POD format
    
        4
  •  0
  •   thkala jaxb    14 年前

    这将在当前目录下的任何文件中递归查找带有“//todo”的任何行:

    grep -rn '// *TODO' .
    

    这会清除一点输出:

    grep -rn '// *TODO' . | while read l; do
            echo "$(cut -d : -f 1,2 <<<"$l"):$(sed 's|.*//[[:space:]]*TODO||' <<<"$l")"
    done
    

    请注意,如果源代码文件名中有冒号(:),这可能会中断。

    可以将输出放在具有最终重定向的文件中。

    编辑:

    这甚至更好:

    grep -rn '// *TODO' . | sed 's|^\([^:]*:[^:]*:\).*//[[:space:]]*TODO|\1|'
    
        5
  •  0
  •   EdoDodo    14 年前

    下面是一个命令,它将查找您所在目录中的所有待办事项及其子目录,并将它们放入文本文件中:

    grep 'TODO' -rn * > TODOs.txt
    

    编辑:

    要删除之前不必要的输出,可以使用以下命令:

    grep 'TODO.*' -rno * > TODOs.txt
    
        6
  •  0
  •   chutsu    6 年前

    如果文件是 git 版本控制 ,您可能希望重用Git的grep。要在源文件中grep for todo,请在repo的根目录下键入以下命令

    git grep TODO
    

    命令输出如下:

    [~/projects/atl][ros] > git grep TODO
    atl_gazebo/src/plugins/quadrotor_gplugin.cpp:  // TODO: switch to attitude controller when in offboard mode
    

    要包括行号,请添加 -n 旗帜:

    [~/projects/atl][ros] > git grep -n TODO
    atl_gazebo/src/plugins/quadrotor_gplugin.cpp:92:  // TODO: switch to attitude controller when in offboard mode
    

    对于更多选项,文档包括 here .