or
たとえば、ファイルを読み取るときにシェルが選択項目を拡張できるかどうか。
たとえば、grep
ファイル内のAまたはBを一致させるなどの構文がサポートされています。(A|B)
同様に、次のファイルがある場合:
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
範囲が広くなるのでできますよcat file{1..5}.txt
。bash
いくつかのファイルに対してこれを行う同等の方法はありますか?
たとえばcat file(1|5).txt
、2? のみ印刷してください。
ベストアンサー1
一致させる標準ファイル名ワイルドカードパターン数字はい[0-9]
。これは単一の数字と一致します。
cat file[0-9].txt
次のいずれかを選択してください。
cat file[25].txt
9より大きい数字の場合は、中括弧拡張が便利です(ただし、ワイルドカードパターンと中括弧拡張の違いについては、以下の注意事項を参照してください)。
cat file{25..60}.txt
同様に、中括弧拡張を使用すると、個々の数字が許可されます。
cat file{12,45,900,xyz}.txt
(上記の例では、中括弧拡張は算術ループを含まず、単に提供された文字列に基づいて名前を生成します。)
では、シェルオプション()を有効にするとbash
次のことも機能します。extglob
shopt -s extglob
cat file@(12|45|490|foo).txt
このパターンは、 - 区切り文字を含む@(...)
すべてのパターンと一致します。|
[...]
中括弧拡張などのワイルドカードパターンの違いは、中@(...)
括弧拡張が次のようになることです。コマンドラインから生成現在のディレクトリにある既存の名前と実際には一致しない可能性があります。ファイル名ワイルドカードパターンは名前と一致しますが、可能な名前がすべて存在しなくてもシェルは文句を言いません。もしいいえnullglob
一致する名前がある場合、シェルオプションも設定されていない場合、パターンは拡張されていません。この場合、パターンは削除されます。
例:
touch file1
ls file[0-9]
file1
ここではファイルのリストのみが表示されます。
あなたがそれを持っているならls file{0..9}
、ls
あなたはそれを見つけることができないと文句を言うでしょfile0
うfile2
。
次の例では、最初のコマンドは既存の名前与えられたパターンと一致しますが、2行目はまだ存在しないファイルを生成します。
touch file[0-9]
touch file{0..9}