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回印刷されることを意味します。

答え2

そのディレクトリ内のすべての.htmlファイルでXXXXで表される文字列を見つけ、文字列が発生したファイルを返すにはgrep十分です。

egrep -l "string1|string2|string3" /path/to/directory/*.html 

grep -El "string1|string2|string3" /path/to/directory/*.html

どちらも同じことを行いますが、代わりにegrep使用しますgrep -E。この-lスイッチは、文字列を含む行ではなく、文字列が表示されるファイルを返します。文字列を変数に割り当てる必要がある場合:

export strings='string1|string2|string3'

egrep -l "$strings" /path/to/directory/*.html 

grep -El "strings" /path/to/directory/*.html

答え3

検索したい文字列を含むファイルを使用できます。

ファイル.txt

foo
bar

それから

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

答え4

文字列を使用できるファイルに対して操作を実行するには、次のコマンドを使用します。

#!/bin/bash

declare -a STRINGS=$(find /var/www/html/ -type f -name "*.html" -exec grep "this is 
test" {} \; -print)

for string in "${STRINGS[@]}"
do
   echo "${string}"
    echo "${STRINGS}"

done

出力:

[root@awx html]# sh test.sh
this is test file1
/var/www/html/1.html
this is test file2
/var/www/html/2.html
this is test file1
/var/www/html/1.html
this is test file2
/var/www/html/2.html
[root@awx html]#

関連情報