数値ファイル拡張子とのみ一致する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を含み、数字で終わるファイル名のリストから、.
最後の部分に.
数字以外のファイル名を含むファイル名を除外します。