líneas grep que comienzan con "1" en Ubuntu


47

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í?


Solo otra nota: si desea usar grep para limitar la lssalida, se encontrará con problemas si los nombres de archivo contienen caracteres extraños, como líneas nuevas ... Muchos otros comandos (de alguna manera no ls, 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
Gert van den Berg

Gracias, @GertvandenBerg! ¿Qué problemas pueden causar algunos caracteres extraños como las nuevas líneas? ¿Qué comandos dan salida separada por nulo?
Tim

1
encuentre con -print0, la mayoría de las otras herramientas GNU tienen una opción -0 o -z. (ordenar, xargs, etc. también). Si los nombres de archivo contienen nuevas líneas, sería imposible saber si dos líneas son un nombre de archivo que contiene una nueva línea o dos nombres de archivo separados.
Gert van den Berg

Respuestas:


68

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 quieres


33

¿Intentaste lo siguiente?

 ls -1 | grep "^1"

Es decir, elimine el *, que básicamente dice grep, encuentre cero o más ocurrencias de la ^1expresión. En otras palabras: coincide con las líneas que comienzan con un 1 o no.


13

Aunque esto no responde a su pregunta, esta es una mejor solución para lo que parece ser su objetivo:

ls -ld 1*

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.


¡Gracias! +1. ¿Cómo * tiene un significado diferente en el globbing de shell y en las expresiones regulares?
Tim

2
En un shell glob * 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.
jordanm

3

^ 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.