significado claro de. * en expresiones regulares

. significa emparejar cualquier carácter en expresiones regulares. * significa cero o más apariciones de la expresión regular SINGLE que la preceden. Mi alphabet.txt contiene una línea

 abcdefghijklmnopqrstuvwxyz 

¿ grep a.*z alphabet.txt significa que no coincide con ninguna subcadena que comienza con a , con cero o más apariciones de cualquier tipo de carácter SINGLE entre ellas, y termina con z ? Por ejemplo, abz , abbz , ahhhhhz , pero no abbdz ?

Pensé que grep a.*z alphabet.txt no detectaría la línea en mi archivo de alfabeto.

* significa que se repite el patrón inmediatamente anterior, no que se repite el texto coincidente. Por ejemplo, [ab]* significa (|[ab]|[ab][ab]|[ab][ab][ab]|…) El patrón [ab] se repite cero o más veces. "aba" porque cumple correctamente el patrón [ab][ab][ab] .

Con .* , Se convierte en (|.|..|...|....|…) , por lo que coincide con cualquier número de caracteres, y los caracteres pueden diferir.

En abbdz , sólo porque . emparejado b al principio no significa . solo coincidirá con b para el rest de la expresión.

Los modificadores de repetición como * actúan sobre el átomo de expresiones regulares anterior, no en las repeticiones del carácter que coincida con el átomo de expresiones regulares anterior. Así por ejemplo:

 $ printf 'az\nabz\nabbz\nabbbz\nabcz\n' | sed -n '/a.*z/p' az abz abbz abbbz abcz 

(todas las líneas coinciden). Si solo desea hacer coincidir las repeticiones del carácter coincidente , puede usar una referencia inversa:

 $ printf 'az\nabz\nabbz\nabbbz\nabcz\n' | sed -n '/a\(.\)\1*z/p' abz abbz abbbz 

grep a.*z coincidir todo entre la primera aparición de a y la última aparición de z, incluidas la primera ay la última z. La .* Es una expresión comodín que coincide con cualquier secuencia de caracteres, incluida una secuencia vacía de longitud = 0. grep a.*z coincide con todas las siguientes cadenas que comienzan con a y terminan con z: “abcdefghijklmnopqrstuvwxyz”, “abz”, “abbz”, “ahhhhhz” y “abbdz”. También coincide con el texto que abarca varias líneas, por ejemplo, este texto:

 abcdefghijklmnopqrstuvwxyz abz abbz ahhhhhz abbdz