@OP,
Czy glob pettern jest używany nie tylko w nazwach plików?
Nie, wzorzec „glob” jest używany nie tylko w nazwach plików. używasz go również do porównywania łańcuchów. W swoich przykładach możesz użyć przypadku / esac, aby wyszukać wzorce łańcuchów.
gg=svm-grid-ch
case "$gg" in
*grid* ) echo "found";;
esac
case "$gg" in ????grid*) echo "found";; esac
case "$gg" in s???grid*) echo "found";; esac
Kiedy w bashu używać wzorca glob, a kiedy wyrażenia regularnego? Dzięki!
Regex są bardziej wszechstronne i „wygodne” niż „wzorce globalne”, jednak jeśli nie wykonujesz złożonych zadań, których „globalizacja / rozszerzone globowanie” nie może łatwo zapewnić, nie ma potrzeby używania wyrażenia regularnego. Regex nie jest obsługiwany w wersji bash <3.2 (jak wspomniał Dennis), ale nadal możesz używać rozszerzonego globowania (poprzez ustawienie extglob
). rozszerzony globbing, zobacz tutaj i kilka prostych przykładów tutaj .
Aktualizacja dla OP: przykład wyszukiwania plików, które zaczynają się od 2 znaków (kropki „.” Oznaczają 1 znak), po których następuje „g” przy użyciu wyrażenia regularnego
np. wyjście
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
W powyższym przypadku pliki są dopasowywane, ponieważ ich nazwy zawierają 2 znaki, po których następuje „g”. (tj ..g
.).
Odpowiednik z globbingiem będzie wyglądał mniej więcej tak: (spójrz na odniesienie dla znaczenia ?
i *
)
$ for file in ??g*; do echo $file; done
abg
degree
..g