検索の正規表現は検索のみです。

検索の正規表現は検索のみです。

製品番号を含むcsvファイル(products.csv)があります。

$ cat products.csv | head -3
2.20
2.21
2.22

他のディレクトリのサブディレクトリには、何千もの製品イメージがあります。

products.csvファイルの製品番号に基づいて製品イメージを見つける必要があります。

私はそれらを見つけるために単純なbashスクリプトを書いた:

#!/bin/sh

PRODUCTS_FOLDER="products";
PRODUCTS="products.csv";

for x in `cat $PRODUCTS`;
do
    FILE=`find $PRODUCTS_FOLDER -follow -iname "$x*"`;
    if [ -n "$FILE" ]; then
            echo "Product $x found:";
            echo "--> $FILE <--";
    else
            echo "Product $x not found";
    fi
    echo "-----------------------------------";
done

しかし、それは私のニーズを完全に満たしていませんでした。結果には次のものがあります。

-----------------------------------
Product 14.144 found:
--> products/Buchzeichen/14.144_Interlaken_sortiert.jpg
products/Motive/14.1448.jpg
products/Motive/14.1445.jpg
products/Motive/14.1449.jpg
products/Motive/14.1446.jpg <--
-----------------------------------

正しい結果には、14.1448、14.1445、14.1449、14.1446ではなく、対応する番号(14.444)の写真のみを含める必要があります。

予想される結果を得るには、findでどの正規指数を使用する必要がありますか?それとも別の回避策がありますか?

あなたの考えや提案に心から感謝します。

答え1

次の正規表現が機能するはずです。

-regex ".*/$x[^0-9].*"

スラッシュの後に数字があり、その後に数字以外の数字があります。

関連情報