web-dev-qa-db-ja.com

1文字または2文字を指定するワイルドカードとは何ですか?

wc -l foo?.txt foo??.txtを記述する簡単な方法はありますか?

私の場合、(最大で)2桁の数字があるので、範囲指定wc -l foo[1-99].txtを使用しようとしましたが、これは1から9(99ではなく)の結果のみを表示することになりました。しかし、これは(機能しない)ハックであり、wc -l foo[?,??].txtのようなものが本当に必要です。

7
Matsmath

2つ以上の選択肢がある場合は、ブレース展開を使用します。

foo{?,??}.txt

または、より具体的に:

foo{[0-9],[0-9][0-9]}.txt

次の3つのファイルがあるディレクトリを考えてみましょう。

$ ls foo*txt
foo111.txt  foo11.txt  foo1.txt

観察する:

$ echo foo{?,??}.txt
foo1.txt foo11.txt

そして:

$ echo foo{[0-9],[0-9][0-9]}.txt
foo1.txt foo11.txt

または、より簡潔に:

$ echo foo{,[0-9]}[0-9].txt
foo1.txt foo111.txt
6
John1024

Bashの拡張グロブextglob)構文では、foo@(?|??)を使用できます。

wc -l foo@(?|??).txt

extglobオプションは、現在のUbuntuリリースの対話型シェルでデフォルトで有効になっている必要がありますが、そうでない場合は、

shopt -s extglob
4
steeldriver