Si lo hago:
$ ls -R
.:
4Shared/ Cloud/
./4Shared:
UFAIZLV2R7.part3.rar
./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part
Si solo quiero enumerar los .rar
archivos, y uso grep , también me mostrará los .rar.part
archivos, lo que no es mi deseo.
Estoy resolviendo esto usando find
o ls **/*.rar
según lo dicho en este hilo y funcionan bien, pero me gustaría saber si es posible hacerlo a través de grep
.
He intentado (pensando EOL
):
ls -R | grep ".rar\n"
sin resultados
Creo que el problema radica en descubrir si la codificación se encuentra al final de la línea , pero no estoy seguro.
¿Alguna ayuda aquí, por favor?
grep
en este caso? ¿Por qué nofind
?find
comando entra en conflicto con el de Windows) y ... aprendizaje ;-). La pregunta no es sobre "Listado de archivos en un directorio" (que es solo un ejemplo personalizado) sino más bien "Comprender el uso del comando grep"ls -1R
.grep
. Mira mi respuesta.-1R
interruptor. Al parecer, los resultados son los mismos.Respuestas:
El
$
ancla coincide con el final de una línea.También puedes usar
find
para esto:fuente
Además de su pregunta, tenga en cuenta que
.rar
no solo coincide con ".rar" sino que coincide con todos los caracteres (incluidos.
) antes delrar
. En este caso, probablemente no sea un problema, pero.
debe escaparse en expresiones regulares.fuente
.asc
es como un*asc
patrón? Entonces coincidirá, por ejemplowhereverasc
,.xrar
.También puede indicar
grep
que busque su cadena comenzando en un límite de palabra. A.
es uno de estos límites.Ejemplo
Digamos que tengo estos datos de muestra.
Este comando solo encontraría el archivo con la
.rar
extensión.¿Cómo funciona esto?
Situaciones donde esto no funcionará
Si tiene archivos con nombres,
blah-rar
estos también se detectarán.Esto se debe a que los caracteres que no sean alfanuméricos generalmente se consideran caracteres de límite, por lo que pasarían por alto este enfoque.
fuente
"
lugar de comillas simples?.rar
. Pero estos no serán un problema con el uso dels -R
. Solo si por casualidad lo usastels -Ra
.-P
cambio agrep
en mi ejemplo. Eso desencadena la interpretación PCRE del argumento.\n
) que es un carácter legal. Sinls -1R
embargo, forzará la visualización de los archivos en una sola columna.Solo haz :
No necesitas
grep
nada.NOTA: Lo anterior funciona ... excepto que todavía se pone al menos
afile-rar
y no entiendo por qué. Lo dejaré aquí, pero no estoy orgulloso de ello. En cualquier caso, como otros han dicho:fuente
xrar
oafile-rar
.afile-rar
yxrar
todavía se están incluyendo en la salida. No hay cambio con tus últimas modificaciones tampoco. Problema molesto no? Es divertido tratar de resolverlo sin los métodos habituales 8-)-dash
pasa. Laxrar
cosa que podía manejar, pero no el-dash.
que no entienden el-dash.
Use comillas simples para hacer que $ funcione como fin de línea. Si desea grep con alguna variable también, use la combinación de comillas dobles y simples como se muestra a continuación:
Mi publicación anterior fue eliminada diciendo que está duplicada. Déjame explicarte cómo esto es diferente.
Las otras publicaciones mencionan el uso completo de comillas dobles
""
o el uso completo de comillas simples''
. Ambos tienen sus propias limitaciones. Lo siguiente lo explica.El problema con todas las comillas dobles es el siguiente:
grep "pattern$"
da el siguiente error:Illegal variable name.
Y el uso de todas las comillas simples funciona, pero si desea la sustitución de variables, todas las comillas simples no funcionarán. Por ejemplo:
Si tengo una cadena
A_BOOK
, incluidas otras cadenas en un archivo ARCHIVO.Si configuro el LIBRO a una variable BK
Si utilizo todas las comillas dobles, aparece el siguiente error:
grep "${BK}$" FILE*
1er $ para la sustitución de variables, 2do para el final del patrón ( nombre de variable ilegal ).Si hago grep con todas las comillas simples, la sustitución de variables no ocurre.
grep '${BK}$' FILE
no devuelve nadaSi uso una combinación de comillas dobles y simples, obtengo lo que espero. Comillas dobles para la sustitución de variables y comillas simples para el final del patrón.
fuente
"foo$"
sintaxis funciona bien en sh y family.Si después de seguir lo anterior y nada funciona, podría deberse a finales de línea. Para arreglar, haz:
dos2unix pr0n.txt
y haz tugrep
otra vez.fuente