@OP、
glob petternはファイル名だけに使用されているのですか?
いいえ、「glob」パターンはファイル名だけに使用されるわけではありません。文字列の比較にも使用できます。例では、case / esacを使用して文字列パターンを検索できます。
gg=svm-grid-ch
# looking for the word "grid" in the string $gg
case "$gg" in
*grid* ) echo "found";;
esac
# [[ $gg =~ ^....grid* ]]
case "$gg" in ????grid*) echo "found";; esac
# [[ $gg =~ s...grid* ]]
case "$gg" in s???grid*) echo "found";; esac
bashでは、globパターンをいつ使用し、いつ正規表現を使用するのですか?ありがとう!
Regexは「globパターン」よりも用途が広く「便利」ですが、「globbing / extended globbing」では簡単に提供できない複雑なタスクを実行している場合を除き、regexを使用する必要はありません。Regexはbash <3.2のバージョンではサポートされていません(dennisが述べたように)が、拡張グロビングを使用できます(を設定することによりextglob
)。拡張グロビングについては、ここといくつかの簡単な例を参照してください。
OPの更新:正規表現を使用して、2文字(ドット "。"は1文字を意味します)で始まり "g"が続くファイルを検索する例
例:出力
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
上記では、ファイル名に2文字の後に「g」が含まれているため、ファイルは一致しています。(すなわち..g
)。
グロビングと同等のものは次のようになります:(およびの意味については参照を参照してください)?
*
$ for file in ??g*; do echo $file; done
abg
degree
..g