【问题标题】:Retrieve "TODO" lines from a text file从文本文件中检索“TODO”行
【发布时间】:2010-11-24 21:24:08
【问题描述】:

我正在 GEdit(文本编辑器)中编辑一个项目。当我输入 TODO 时,它会以黄色突出显示以供将来参考。我在这个地方有很多这样的TODOs。

为了更清楚我需要做什么,谁能告诉我一种从一堆文件中提取任何TODO 行并将它们放入一个名为TODOs.txt 的文本文件的方法?

我有这样的事情:

// TODO: Error handling.

并希望将其放入这样的文件中:

* <file name> <line number> Error handling

Linux 应用程序(CLI,GUI 不介意)会更好,但正则表达式脚本或其他人可以想出的方法会很酷。

【问题讨论】:

    标签: string todo


    【解决方案1】:

    试试grep TODO -rnf * > TODOs.txt

    【讨论】:

    • 我使用了grep TODO -n * > TODOs.txt。非常感谢!我从来不知道它是如此简单。你知道有一种方法可以删除 TODO 行开头的 // 字符之前的任何制表符或空格吗?
    • 在回复第一条评论时,您可以使用grep 'TODO.*' -rno * > TODOs.txt 不包含之前的输出。
    【解决方案2】:

    如果文件受git 版本控制,您可能希望重用 git 的 grep。要在源文件中对 TODO 进行 grep,请在 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

    【讨论】:

      【解决方案3】:

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

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

      这将检索包含“TODO”字符串的所有行的列表,前面带有文件名和行号,并将其存储在 TODOs.txt 中

      【讨论】:

      • 顺便说一句,如果您想要确切的格式“* 错误处理”,也可以轻松完成,但我认为格式并不重要
      • 不,grep 给出的格式很好 :-) 我只需要粗略的信息。
      【解决方案4】:

      Riley Lark(和 EdoDodo 的)的答案可能是最简洁的,但是如果没有文字“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
      

      【讨论】:

        【解决方案5】:

        这将递归地在当前目录下的任何文件中找到任何带有'// 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|'
        

        【讨论】:

          【解决方案6】:

          这是一个命令,它将在您所在的目录及其子目录中查找所有 TODO,并将它们放在一个文本文件中:

          grep 'TODO' -rn * > TODOs.txt
          

          编辑:

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

          grep 'TODO.*' -rno * > TODOs.txt
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-08
            • 2021-02-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-25
            • 2012-03-26
            • 2015-07-20
            相关资源
            最近更新 更多