Получить строки "TODO" из текстового файла - PullRequest
2 голосов
/ 25 ноября 2010

Я редактирую проект в GEdit (текстовый редактор). Когда я набираю TODO, он подсвечивается желтым для дальнейшего использования. У меня есть довольно много таких TODO по всему месту.

Чтобы было яснее, что мне нужно сделать, кто-нибудь может показать мне способ извлечения любых строк TODO из группы файлов и помещения их в один текстовый файл, например, TODOs.txt?

У меня есть что-то вроде этого:

// TODO: Error handling.

И хотите, чтобы это было помещено в файл, подобный этому:

* <file name> <line number> Error handling

Было бы предпочтительнее приложение Linux (CLI, GUI, не обращая внимания), но было бы неплохо использовать сценарий регулярного выражения или другой метод, который кто-то может придумать.

Ответы [ 6 ]

2 голосов
/ 25 ноября 2010

попробуй grep TODO -rnf * > TODOs.txt

1 голос
/ 26 апреля 2013

Ответы Райли Ларк (и 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
1 голос
/ 25 ноября 2010

Если ваш список файлов, в котором есть TODO, хранится в файле, скажем, с именем «file_list.txt», выполните:msgstr "строка, с добавлением имени файла и строки #, и сохраните это в TODOs.txt

0 голосов
/ 19 ноября 2018

Если файл git с управлением версиями , вы можете использовать Git Grep. Чтобы выполнить поиск 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

Для получения дополнительной информации о документах здесь .

0 голосов
/ 25 ноября 2010

Вот команда, которая найдет все TODO в каталоге, в котором вы находитесь, и его подкаталоги, и поместит их в текстовый файл:

grep 'TODO' -rn * > TODOs.txt

EDIT:

Чтобы удалить ненужный вывод перед ним, вы можете использовать эту команду вместо:

grep 'TODO.*' -rno * > TODOs.txt
0 голосов
/ 25 ноября 2010

Это будет рекурсивно найти любую строку с '// 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|'
...