Quería enumerar el contenido de un pwd y mostrar solo el archivo que comienza con punto. Lo intenté ls -a | grep ^\.
pero no puedo entender por qué la salida contiene también los archivos que no comienzan con punto. Por ejemplo:
Pictures
.pip
.pki
.profile
projects
Public
Sé que puedo lograr lo que quiero. ls -ld .*
Tengo curiosidad por este comportamiento de grep que no puedo explicar.
grep
regular-expression
ps-aux
fuente
fuente
ls -d .*
enumerar todos los archivos que comienzan con.
?Respuestas:
Cite el argumento para
grep
, asíls -a | grep '^\.'
La razón de esto es que el shell lo maneja
\.
y lo vuelve a convertir en simple.
, quegrep
luego se trata como un comodín de un solo carácter. En caso de duda, siempre cite una cadena que contenga (o pueda contener) un carácter especial para el shell.fuente
grep ^\\.
, \\ es tratado por el shell como una barra diagonal inversa simple y nuevamente el grep trata la barra diagonal inversa simple seguida por el punto como punto literal.Debe poner la expresión regular grep entre comillas.
Nota: No analice la salida del
ls
comando .fuente
Si ejecuta cmd ls -a | grep ^ \. entonces grep no considere "\" como un carácter especial y significado de "." No te escapes.
Cuando usamos cmd ls -a | grep "^ \." entonces grep considera "\" como un carácter especial y significado de "." se escapa Le dará un resultado como se esperaba.
Si desea utilizar grep cmd sin comillas, también debe escapar del carácter "\". Puede haber esperado el resultado sin comillas dobles siguiendo el comando. ls -a | grep ^ \\.
Para obtener detalles sobre el significado de caracteres especiales en Regex, consulte el siguiente enlace. http://www.regular-expressions.info/quickstart.html
fuente