for ループが保留状態で実行されません。

for ループが保留状態で実行されません。

heaq* .mdファイルで単語を含むすべての行を見つけようとします。

$  for i in $(find . -regex ".*md$"); do grep -i "heaq"; done
#pending
#pending

しかし、まだ解決されていない状態です。

私のコードに何の問題がありますか?

ベストアンサー1

これはgrep「未定」です。grep実行時に読み取るファイル名がない場合は、標準入力を読み込みます。標準入力にデータを提供しない場合は「停止」と表示されます。

また、出力を繰り返しますfind。これはエレガントではなく(すべてのパス名が見つかるまでループは実行されませんfind)、危険です(パス名がスペースに分割され、シェルがファイル名のグロービングを実行します)。

grep代わりに、特定のファイル名サフィックスを持つすべてのファイルに対して実行するには、次の手順を実行します。

find . -type f -name '*.md' -exec grep -iF 'heaq' {} +

私はこれをパターンがファイル名サフィックスを持つファイル名とのみ一致する-regex標準テストに変更しました。また、通常のファイルでのみ実行するのが合理的であるため、これを追加しました(ディレクトリ以外のファイルで実行するように変更したい場合があります)。-name.md-type fgrep-type f! -type d

見つかったパス名を一括して実行しますgrep。正規表現ではなく文字列を一致させるため、withを-exec使用します。部分文字列以外の単語を一致させるには、追加する必要があります。-Fgrep-w

関連:

おすすめ記事