ファイル名にシェル拡張(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}

答え2

使用する構文はsumfile{1,2}と評価されます。file1file2

$ ls
$ touch file{1,2,3,4,5,6,7,8,9}
$ ls
file1  file2  file3  file4  file5  file6  file7  file8  file9

touch file{1..9}Inianが以下に指摘したように、この例では実行するのが簡単になります。

$ ls
$ touch file{1..9}
$ ls
file1  file2  file3  file4  file5  file6  file7  file8  file9

次のように複数の式を使用することもできます。

$ ls
$ touch file{1..9}{a..z}
$ ls
file1a file1b file1c
[...]
file9x file9y file9z

はい、上記の操作を実行すると、234(926)のファイルが作成されます。

答え3

はい、シェルで中括弧拡張を使用できますbash。いくつかのファイルの場合は、単にまたはfile{1..2}好きです。file{1,2}

あるいは、場合によってはファイルが存在しないことを心配している場合は、単純なループを実行してください。

for file in file{1..4}.txt; do
    [ -f "$file" ] || continue
    echo "$file" # Do other actions on file here
done

または、接続のみがファイルに対する唯一の操作である場合不確実ないつでも存在しないようなファイルは表示してcatエラーを抑制してください。/dev/nullファイルが利用できない場合は、標準エラーにリダイレクトするとエラーが抑制されます。

cat file{1,5}.txt 2>/dev/null

file[15]または、ファイルが見つからなくてもエラーを表示しないglob式を使用してください。

cat file[15].txt

関連情報