ファイル名にシェル拡張(A | B)がありますか?

ファイル名にシェル拡張(A | B)がありますか?

orたとえば、ファイルを読み取るときにシェルが選択項目を拡張できるかどうか。

たとえば、grepファイル内のAまたはBを一致させるなどの構文がサポートされています。(A|B)

同様に、次のファイルがある場合:

file1.txt
file2.txt
file3.txt
file4.txt
file5.txt

範囲が広くなるのでできますよcat file{1..5}.txtbashいくつかのファイルに対してこれを行う同等の方法はありますか?

たとえば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次のことも機能します。extglobshopt -s extglob

cat file@(12|45|490|foo).txt

このパターンは、 - 区切り文字を含む@(...)すべてのパターンと一致します。|


[...]中括弧拡張などのワイルドカードパターンの違いは、中@(...)括弧拡張が次のようになることです。コマンドラインから生成現在のディレクトリにある既存の名前と実際には一致しない可能性があります。ファイル名ワイルドカードパターンは名前と一致しますが、可能な名前がすべて存在しなくてもシェルは文句を言いません。もしいいえnullglob一致する名前がある場合、シェルオプションも設定されていない場合、パターンは拡張されていません。この場合、パターンは削除されます。

例:

touch file1

ls file[0-9]

file1ここではファイルのリストのみが表示されます。

あなたがそれを持っているならls file{0..9}lsあなたはそれを見つけることができないと文句を言うでしょfile0file2

次の例では、最初のコマンドは既存の名前与えられたパターンと一致しますが、2行目はまだ存在しないファイルを生成します。

touch file[0-9]

touch file{0..9}

おすすめ記事