私のデータベースサーバー(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