findとgrepを使用して文字列リストを取得する方法

findとgrepを使用して文字列リストを取得する方法

bashスクリプトに以下を作成しようとしています。

#!/bin/bash

find /path/to/file -type f -name "*.html" -exec grep -l "XXXX" '{}' \; -print

ここで、XXXXはこのコマンドを繰り返す必要がある文字列のリストです。私はスクリプトの正しい部分をループに入れるのに苦労しました。

ベストアンサー1

zshタグを使用しましたが、#!/bin/bashshebangを使用しました。 2つの異なる殻がありますbashzsh

grep複数の文字列を見つける1つの方法は、を使用して呼び出すことですgrep -F -e 'first string' -e 'second string' -e'blah'...

zshの配列に文字列リストがある場合:

strings=('first string' 'second string' '***')

あなたはできます:

GNUの使用grep:

grep -Frl --include='*.html' -e$^strings .

または以下を使用してくださいfind

find . -name '*.html' -type f -exec grep -Fl -e$^strings {} +

または、zsh再帰的なglobbingとglob修飾子を使用します。

grep -Fl -e$^strings -- **/*.html(D.)

あるいは、引数の数に対するシステム制限を解決するには、htmlファイルが多い場合はfind's 'のようなコマンドを渡すことができます。-exec

autoload -Uz zargs
zargs -- **/*.html(D.) -- grep -Fl -e$^strings --

これはファイルリストをソートできるという利点もあります(ot rderoNにglob修飾子を追加することでこのソートを無効にすることができます)。No

-lすでに印刷されているファイル名には一致する1つ以上のaddが含まれているため、成功する-printと印刷されたファイル名は重複grepしてファイル名が2回印刷されることを意味します。

おすすめ記事