Intento buscar líneas que comienzan con "1" usando
ls -1 | grep ^1*
pero devuelve líneas que no comienzan con 1. ¿Qué me falta aquí?
Intento buscar líneas que comienzan con "1" usando
ls -1 | grep ^1*
pero devuelve líneas que no comienzan con 1. ¿Qué me falta aquí?
ls
salida, se encontrará con problemas si los nombres de archivo contienen caracteres extraños, como líneas nuevas ... Muchos otros comandos (de alguna manera nols
, al menos no la versión que tengo que verificar) tiene una opción para dar salida separada nula, que luego puede procesar con seguridadgrep -z
Respuestas:
Tu expresión regular no significa lo que crees que hace. Coincide con todas las líneas que comienzan (^) con una (1) repetida cero o más (*) veces. Todas las cadenas coinciden con esa expresión regular.
grep '^1'
hace lo que quieresfuente
¿Intentaste lo siguiente?
Es decir, elimine el
*
, que básicamente dicegrep
, encuentre cero o más ocurrencias de la^1
expresión. En otras palabras: coincide con las líneas que comienzan con un 1 o no.fuente
Aunque esto no responde a su pregunta, esta es una mejor solución para lo que parece ser su objetivo:
Puede usar un globo de shell para enumerar todos los archivos que comienzan con
1
. Tenga en cuenta que*
tiene un significado diferente en globbing de shell que las expresiones regulares.fuente
*
hay un comodín que significa "0 o más de cualquier carácter". El significado de la expresión regular se explica en la respuesta de otokan.^ 1. * coincide con la línea completa, o tal como se dijo anteriormente, ^ 1 obtuvo la cadena contenida en la línea.
diferentes estilos de expresiones regulares utilizan diferentes símbolos que representan caracteres, algunas opciones especifican qué estilo desea. y diferentes opciones especifican si desea hacer coincidir toda la línea, o solo parte de ella, o toda la entrada como una cadena.
fuente