特定のテキストを含むファイル名と行番号を出力するスクリプトを作成します。

特定のテキストを含むファイル名と行番号を出力するスクリプトを作成します。

フォルダー内のすべての .tex ファイルをスキャンして の出現を検出し\todo、出現したファイル名と行番号を出力する (bash) スクリプトを作成するにはどうすればよいでしょうか?

これまでに得たもの:

#!/bin/bash
for texfile in *.tex ; do
  **Scan for \todo**
  **output $textfile$ , linenumber**
done

.tex ファイルを配信するときに、その中に含まれていないことを確認したいです\todo{sometext} 。

bash である必要はありません。単に単純さのためにそれを選択しただけです。Grep なども歓迎されます。

答え1

grepこれを単独で実行することもできますが、必要に応じてスクリプトでラップすることもできます。

grep -nr '\todo' *.tex

-r再帰的に -nファイル内の行番号を表示する

デフォルトでは、grep は一致した行を表示します。一部の形式では、出力が大量になる場合があります。一致した部分とその前後の数文字だけが表示されるように出力を制限したい場合は、次のようにします。

egrep -nor '.{0,20}\\todo.{0,20}'  *.tex

は「一致する結果のみを表示する」という意味-oですが、 のみが表示されます\todo。コンテキストを把握するために、一致の両側に最大 20 文字までの任意の数の文字を許可します。 は.任意の文字と一致し、 は{0,20}最大 20 文字までこの一致を繰り返します。

関連情報