10、11、12で終わるすべてのファイルを一覧表示しようとしましたが、何も機能しませんでしたls *[10-12]
。ls *[10,11,12]
理由はわかりません。誰が私を助けることができますか?
答え1
[...]
マッチ一つ特徴(要素の構成一部のシェルでは)指定されたコレクションに存在する場合。
[10-12]
まで1
の1つ以上の文字を表すので、または1と同じです。0
1
2
[102]
[0-2]
[10,11,12]
1
、、、、…はと同じであることを意味し0
ます。,
1
[,0-2]
希望する場所は次のとおりです。
ls -d -- *1[0-2]
つまり、(隠されていない)ファイル名は1で終わり、その後に0
、1
または2
文字が続きます。
foo110
これでorとも一致しますfoo112345612
。
これを望まない場合は、次のものが必要です。
ls -d -- *[!0-9]1[0-2] 1[0-2]
しかしこれは似合わないfoo010
で と を一致させるfoo10
には、 または 次をfoo00010
使用します。foo110
foo10
foo00010
ksh
bash -O extglob
zsh -o kshglob
ls -d -- !(*[0-9])*(0)1[0-2]
with を除いて、zsh
これらのパターンの中に一致しないパターンがある場合はそのまま渡されるため、ls
存在する場合はその名前のファイルが生成され、未使用のファイルが生成される可能性があります。リストする必要はありません。を使用すると、この問題を解決するためのオプションをbash
設定できます。failglob
zsh
数値範囲に一致するグローバル演算子を持つ唯一のシェルです。
ls -d -- *<10-12>
10 ~ 12 の数字で終わるファイルと一致します。後ろに来るfoo110
ので一致することもできます。以下を使用して、次のことができます。foo1
10
extendedglob
ls -d -- (^*[0-9])<10-12>
しかし。
zsh
また、中かっこ拡張型を導入したシェルです{10..12}
(数年後にksh93とbashによってコピーされます)。
しかし、{10,11,12}
同等のようにいいえワイルドカード。これはワイルドカード以前に実行された拡張形式です。
ls -d -- *{10..12}
まず、次に展開してください。
ls -d -- *10 *11 *12
zsh
3つのglobのうちの1つが失敗すると、コマンドは(および)で中断されますbash -O failglob
。
bash
1しかし、一般的なUTF-8ロケールのGNUシステムを含むいくつかのシェルやロケールでは、٠ота०০੦૦୦௦౦౸೦൦෦๐໐༠༳၀႐០៰᠐᥆᧐ en_US.UTF-8
᪀᪐᭐᮰᱀᱐⁰₀↉⓪⓿〇㍘[0-1]
答え2
この試み:
ls *{10,11,12}
または
ls -l *{10,11,12}
(隠しファイルは表示できません)
答え3
これは働きます:
ls -d -- *1[0-2]
これは[]
文字セットを表すことに注意してください。数値の場合は[0-9]です。
答え4
ls *@(10|11|12)
これがあなたが探しているものです。
extglob
この機能は以下を使用して有効にする必要があります。Shoputつまり、shopt -s extglob
。また、この行を追加して~/.bashrc
永久に有効にすることもできます。
仕組みの詳細については、以下を参照してください。パターンマッチの公式Bashマニュアルページ。