複数の文字列のファイル検索

複数の文字列のファイル検索

私のデータベースサーバー(Unixボックス)にSQLファイルがあります。テーブル内の特定の列を使用する* .sqlファイルを見つけようとします。たとえば、内容はmy_dir/SALES_TERRITORY.sql次のとおりです。

Select segment1,segment2
from HZ_CUST_SITE_USES_ALL
where territory_id = :p_territory_id;

したがって、私の要件は、コマンドを実行するときに「HZ_CUST_SITE_USES_ALL」と「territory_id」の組み合わせを持つすべてのファイルをインポートする必要があることです。

インターネット検索で以下を行いましたが、目的の結果が得られませんでした。

grep -i "HZ_CUST_SITE_USES_ALL\|TERRITORY_ID" *

私の期待は、上記のコマンドが私に次のような結果を与えるということです

grep -i "HZ_CUST_SITE_USES_ALL\|TERRITORY_ID" my_dir/*

SALES_TERRITORY.sql

どんな助けでも大変感謝します。

挨拶、

ベストアンサー1

ファイル名のみをリストするには、次のようにgrepを使用します(-エル):("-最大深さ0)はmy_dirの下でのみ確認され、その中にあるサブディレクトリは確認されません。

ファイル名にスペースが含まれている場合は、次のものを使用できます。

find ./* -maxdepth 0 -type f -exec grep -qi "HZ_CUST_SITE_USES_ALL" {} \; -and -exec grep -li "TERRITORY_ID" {} \;

Solaris 用に編集:

find ./* -prune -type f -exec /usr/xpg4/bin/grep -qi "HZ_CUST_SITE_USES_ALL" {} \; -a -exec /usr/xpg4/bin/grep -li "TERRITORY_ID" {} \;

ファイル名の間にスペースがないと確信している場合は、次のように単純なforループを使用できます。

for file in $(find my_dir/* -maxdepth 0 -type f)
do
  grep -qi "HZ_CUST_SITE_USES_ALL" "$file" && grep -il "TERRITORY_ID" "$file";
done

おすすめ記事