No puedo hacer que grep con expresiones regulares funcione correctamente

No puedo hacer que grep con expresiones regulares funcione correctamente
ssh1% cat temp

sarah

saab

marrrrrrrrra

marrrrrrrtha

ssh1% grep ar*a temp

grep: No match.

¿No debería ser este el resultado?

sarah saab marrrrrra

Intenté usar PuTTY y nxclient para Windows 10.

Respuesta1

Estás usando csh, que ve el *e intenta expandirlo como unglobo de conchay falla. Es decir, cshaquí dice "No hay coincidencia", no grep. A diferencia deConchas de la familia Bourne, cshno pasará un patrón global no expandible al comando, por lo que debe citarlo para poder cshpublicarlo en grep.

Recomiendo comillas simples aquí ya que no estás intentandointerpolaruna variable en la cadena:

% grep 'ar*a' temp
sarah
saab
marrrrrrrrra

Las comillas dobles también funcionarán en este caso porque su patrón no contiene $, pero recomiendo usar comillas simples aquí de todos modos. Es un hábito que vale la pena cultivar y considerar cuidadosamente qué comillas usa en idiomas que le permiten usarlas de manera semi-indistinta, como Shell, Perl, etc. No necesitamos interpolación de cadenas aquí, por lo que elegiremos no usar el estilo de comillas. que lo permita.

Por cierto, también deberías citar los patrones RE en los shells de la familia Bourne. Como insinúa Mike Wagner en su comentario anterior, porque las expresiones regulares y los patrones globalesutilizar muchos de los mismos caracteres especiales, a veces puedes escribir un patrón RE que simplementesucedetambién coincide con algunos archivos y, por lo tanto, el shell lo expande inesperadamente.

información relacionada