Bash パターンマッチング
Bashのパターンマッチングは、ディレクトリから異なるファイル名を選択したり、文字列が特定のフォーマットに一致するかを確認する際に役立つ不可欠な概念です。Bashのパターンマッチングを始めたばかりの方でも、スキルを磨きたい方でも、このガイドではパターンマッチングのさまざまな方法やコツを紹介します。
パターンマッチング
Bashは主に2種類のパターンマッチングを提供しています:グロブと拡張グロブです。これらはユーザーがファイル名を選択し、異なる文字列を特定のルールに照合するための簡単な方法を提供します。しかし、Bashは正規表現の使用もサポートしており、特にスクリプトを使用してさまざまなユーザー入力を検証したり、データを解析するときに便利です。
1. グロブによるBashパターンマッチング
グロブパターンマッチングは、特定のファイル名を指定されたディレクトリ内で確認することが主な作業です。それらはワイルドカードと呼ばれています。bashのグロブパターンには3種類あります:
2. アスタリスク (*)
これは、ゼロ以上のファイル名に一致させたいときに使用されます。
いくつかの例を見てみましょう。
指定された文字で始まるまたは終わるファイル名の確認
例えば、l またはliで始まるファイルを検索する必要がある場合、次のコマンドを使用できます。
ls l*
ls li*現在のディレクトリ内で、liまたはlで始まるすべてのファイル名に一致することに注意してください。ディレクトリも含まれます。
ディレクトリのみと一致させるには、次のようにワイルドカードの後に/を追加します。
同様に、特定の文字で終わるファイル名を一致させる必要がある場合、次の図に示されたようにワイルドカードを使用できます。この例では、e.で終わるファイル名を一致させます。
ls *eファイル名が不明であるが与えられた文字を知っていると仮定します。次の例のように、文字の前後にワイルドカードを追加することで、ファイル名を一致させることができます。
私たちは名前にnuxキーワードを含むファイル名を一致させました。
特定の拡張子を持つファイルのチェック
Bashのパターンマッチングを使うと、特定の拡張子を持つファイルを見つけることができます。たとえば、すべてのPDFやテキストファイルを見つけたい場合は、ファイル拡張子の前にワイルドカードを追加します。テキストファイルをすべて一致させる以下の例を見てみましょう。
ls *.txtすべてのテキストファイルは以下のように一致しています:
3. クエスチョンマーク (?)
疑問符ワイルドカードは、1文字に一致するファイル名と一致します。ただし、各「?」がそれぞれの文字を表すため、特定のファイル名にいくつの文字があるかを知っておく必要があります。
例えば、4文字のファイル名に一致させるために、最後の文字が分かっている場合、次のような例を挙げることができます。
ls ???e同様に、ファイル名の文字数が分かっている特定の拡張子を見つけるには、次のコマンドを使用できます:
ls ?????.txt4. 角括弧 []
特定の検索をしたい場合、例えば指定された文字を含むファイル名と一致させる場合は、一致させる文字を角括弧内に追加できます。
たとえば、拡張子に関係なく指定された任意の文字や数字を含むファイル名に一致させるために、次のコマンドを使用できます:
ls [e-m]*.*
ここでは、eからmまでの任意の文字を含み、任意の拡張子を持つファイル名を一致させます。
特定の文字で始まるファイル名、例えば[f-l]で始まり、特定の拡張子を持つファイルをマッチさせたい場合、次のパターンを使用できます:
ls [f-l]*.txt*5. 拡張グロブによるBashパターンマッチング
拡張グロブは正規表現に非常に似ています。ただし、デフォルトでは無効になっています。使用する必要がある場合は、次のコマンドを使用して有効にする必要があります。
shopt -s extglob拡張グロブには次が含まれます:
6. ?(パターン)
指定されたパターンのゼロまたは一回の出現と一致させるときに使用されます。
例えば、特定の拡張子を持つすべてのファイル名や、名前に特定の文字を含むファイル名を一致させたい場合、次のコマンドを使用できます:
ls ?(*nux* | *.sh)7. *(パターン)
指定されたパターンのゼロ回またはそれ以上の出現と一致させるときに使用されます。
例えば、ゼロ個以上の「f」で始まり、テキストファイルであるファイル名に一致させるために、次のコマンドを使用できます:
ls *(f).txt8. +(パターン)
指定されたパターンの1回以上の出現と一致する場合に使用されます。
前のコマンドを実行すると、少なくとも1つの「f」を含む必要があるファイル名のみが一致することに注意してください。これは、.txtファイルは一致しないことを意味します。
ls +(f).txt9. @(パターン)
これは、指定されたパターンの1回の出現と一致させるときに使用されます。
もし私たちが前の例で使用したのと同じパターンを使用して、1つの「f」のみを含むファイル名を一致させる必要がある場合、以下のように@を使うことができます:
ls @(f).txt10. !(パターン)
指定されたパターンに一致しないすべてのものを一致させたいときに使用されます。
特定のパターンを持たないすべてのファイル名を一致させたい例を挙げましょう。この例では、テキストファイルでもBashスクリプトでもないすべてのファイル名を一致させます。コマンドは次のとおりです:
ls !(*.txt|*.sh)結論
このガイドでは、Bashのパターンマッチングと、さまざまな例を紹介し、さまざまなパターンマッチングオプションの扱い方を理解できるようにしています。この基盤を使えば、Bashのパターンマッチングを進め、ターミナルでさまざまなパターンを一致させたり、Bashスクリプトを作成したりする際に同じ論理を使用することができます。













