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

时间:2010-11-24 21:24:08

标签: string todo

我正在用GEdit编辑一个项目(文本编辑器)。当我输入TODO时,它会将其突出显示为黄色以供将来参考。我周围有很多TODO个。{/ p>

为了让我更清楚我需要做什么,任何人都可以向我展示从一堆文件中提取任何TODO行的方法,并将它们放入一个名为TODOs.txt的文本文件中?

我有这样的事情:

// TODO: Error handling.

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

* <file name> <line number> Error handling

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

6 个答案:

答案 0 :(得分:2)

尝试grep TODO -rnf * > TODOs.txt

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这是一个命令,它可以找到你所在目录中的所有TODO,它是子目录,并将它们放在一个文本文件中:

grep 'TODO' -rn * > TODOs.txt

修改

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

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

答案 5 :(得分:0)

如果文件受git版本控制,则可能要重用git的grep。要在源文件中grep for TODO,请在存储库的根目录下键入以下命令

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