数値ファイル拡張子のみ一致

数値ファイル拡張子のみ一致

数値ファイル拡張子とのみ一致するUNIXパターンを見つけようとします。たとえば、次のようになります。

  • ファイル1
  • ファイル.2
  • 文書1.1
  • 5ファイル2.52
  • ファイル。25938

ちょっと待って、そうではありません。

  • ファイル1.0.ext
  • ファイル4.csv
  • 6ファイル5.5.2.ext
  • File.1s
  • ファイル.s134

これは簡単だと思いましたが、理解できないようです。試してみました。

  • *.[0-9]* は file1.0.csv と一致します。
  • *.[0.9]*/> はどんなものとも一致しません。

私が何を見逃しているかを知っている専門家がありますか?私の考えでは、//単語の終わりに一致すると思います。

編集 - 説明:私はUnixシェルスタイルのワイルドカードを使用するモジュールを使用してPythonでコーディングしているので、そのワイルドカードにのみアクセスできます。

ベストアンサー1

そしてzsh

echo file.<->

<-><x-y>like の特殊な形式ですが、<1-100>制限なくすべての正の 10 進数 (空でない 10 進数のシーケンス) と一致します。または、次のextendedglobオプションを使用します。

echo file.[0-9]##

##+拡張正規表現演算子と同じです。

以下と一緒に、kshまたはbash -O extglob(またはshopt -s extglob以内bash)またはzsh -o kshglob(またはsetopt kshglob以内zsh):

echo file.+([0-9])

繰り返しますが、+(x)EREと同じですx+

ksh93また、そのglobでEREを使用することもできます。

echo ~(E).*\.[0-9]+$

.*必ずしも必要ではなく、この機能がないと~(E)\.[0-9]+$隠されたファイルも一致します。)

標準グローブに該当するものはありません。彼らが持っているものは次のとおりです。

  • *必要な数の文字と一致
  • ?単一文字と一致
  • [criteria]一致する文字と一致基準

リストをポストフィルタリングする必要があります。たとえば、次のようになります。

set -- *.*[0-9]
for i do
  case ${i##*.} in
    (*[!0-9]*) ;;
    (*) set -- "$@" "$i"
  esac
  shift
done
echo "$@"

つまり、aを含み、数字で終わるファイル名のリストから、.最後の部分に.数字以外のファイル名を含むファイル名を除外します。

おすすめ記事