@OP,
Is glob pettern not only used for file names?
No "pegote" patrón no sólo se utiliza para nombres de archivo. usted lo usa para comparar cadenas también. En sus ejemplos, puede usar case/esac para buscar patrones de cuerdas.
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
In bash, when to use glob pattern and when to use regular expression? Thanks!
expresiones regulares son más versátiles y "conveniente" que "patrones globales", sin embargo, a menos que usted está haciendo tareas complejas que "globbing/englobamiento extendido" no puede proporcionar fácilmente, entonces no hay necesita usar regex Regex no son compatibles con la versión de bash < 3.2 (como dennis mencionó), pero aún puede utilizar globbing extendido (estableciendo extglob
). para globbing extendido, vea here y algunos ejemplos simples here.
Actualización para OP: Ejemplo para encontrar los archivos que comienzan con 2 caracteres (los puntos medios 1 char "") seguido de "g" usando expresiones regulares
por ejemplo salida
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
En lo anterior , los archivos coinciden porque sus nombres contienen 2 caracteres seguidos por "g". (es decir, ..g
).
El equivalente con globbing será algo como esto: (mira reference de sentido de ?
y *
)
$ for file in ??g*; do echo $file; done
abg
degree
..g
Entonces, ¿hay dos maneras de hacer coincidir cadenas: patrón global y expresión regular? ¿Glob pettern no solo se usa para nombres de archivos? En bash, ¿cuándo usar el patrón glob y cuándo usar la expresión regular? ¡Gracias! – Tim
@Tim: Globbing está disponible en la mayoría o en todas las versiones de Bash. La coincidencia de Regex solo está disponible en la versión 3 y superior, pero recomendaría solo usarla en 3.2 y versiones posteriores. Los regex son ** mucho ** más versátiles que los globbing. –