3

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

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

我有这样的事情:

// TODO: Error handling.

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

* <file name> <line number> Error handling

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

4

6 回答 6

2

尝试grep TODO -rnf * > TODOs.txt

于 2010-11-24T21:28:40.673 回答
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

更多选项文档在这里

于 2018-11-19T10:27:46.647 回答
1

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

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

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

于 2010-11-24T21:26:32.550 回答
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
于 2013-04-26T05:03:23.793 回答
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|'
于 2010-11-24T21:28:42.903 回答
0

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

grep 'TODO' -rn * > TODOs.txt

编辑:

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

grep 'TODO.*' -rno * > TODOs.txt
于 2010-11-24T21:29:15.057 回答