3

GEdit (テキスト エディタ) でプロジェクトを編集しています。入力するとTODO、後で参照できるように黄色で強調表示されます。TODO私はその場所の周りにこれらのかなりの数を持っています。

私が何をする必要があるかを明確にするために、誰かTODOがファイルの束から任意の行を抽出し、それらを1つのテキストファイルに入れる方法を教えてもらえます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 に答える
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 に答える
1

TODO を含むファイルのリストが「file_list.txt」という名前のファイルに保存されている場合は、次を実行します。

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

これにより、ファイル名と行番号が先頭に追加された「TODO」文字列を含むすべての行のリストが取得され、TODOs.txt に保存されます。

于 2010-11-24T21:26:32.550 に答える
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 に答える