Tengo un archivo donde quiero grep para líneas que comienzan con -rwx o drwx Y terminan en cualquier número.Grep para el comienzo y el final de la línea?
Tengo esto, pero no está bien. ¿Algunas ideas?
grep [^.rwx]*[0-9] usrLog.txt
Tengo un archivo donde quiero grep para líneas que comienzan con -rwx o drwx Y terminan en cualquier número.Grep para el comienzo y el final de la línea?
Tengo esto, pero no está bien. ¿Algunas ideas?
grep [^.rwx]*[0-9] usrLog.txt
La parte difícil es una expresión regular que incluye un guión como uno de los caracteres válidos en una clase de caracteres. El guión debe venir inmediatamente después del inicio de una clase de caracteres (normal) e inmediatamente después del símbolo de una clase de carácter negada. Si también necesita un corchete cuadrado, necesita el corchete cuadrado cerrado seguido del guión. Afortunadamente, solo necesitas dash, de ahí la notación elegida.
grep '^[-d]rwx.*[0-9]$' "[email protected]"
Ver: Regular Expressions y grep para más detalles POSIX estándar.
Probablemente desee egrep. Proveedores:
egrep '^[d-]rwx.*[0-9]$' usrLog.txt
Parece como si estuvieras en el camino correcto ... El carácter ^
partidos a partir de la línea, y $
partidos de fin de línea. El patrón de Jonathan funcionará para usted ... solo quería darle la explicación detrás de él
No del todo en el camino correcto, sin embargo. Es significativo observar que los caracteres dentro de una clase de caracteres '[]' se comportan de forma significativamente diferente a como lo harían en otras partes de la expresión regular. – ephemient
¿está analizando la salida de ls -l
?
Si es así, y lo que desea es obtener el nombre del archivo
find . -iname "*[0-9]"
Si no tiene otra opción, porque usrLog.txt es creado por algo/alguien más y que es absolutamente necesario utilizar este archivo, otras opciones incluir
awk '/^[-d].*[0-9]$/' file
Rubí (1.9+)
ruby -ne 'print if /^[-d].*[0-9]$/' file
Bash
while read -r line ; do case $line in [-d]*[0-9]) echo $line; esac; done < file
Cabe señalar que el cursor (^) no solo se comportará de manera diferente dentro de los corchetes, sino que tendrá el resultado opuesto de colocarlo fuera de los corchetes. Colocando el cursor donde lo tienes buscará todas las cadenas que NO comiencen con el contenido que colocas entre corchetes. También querrás colocar un período antes del asterisco entre tus corchetes, como con grep, también actúa como un "comodín".
grep ^[.rwx].*[0-9]$
Esto debería funcionar para usted, he notado que algunos carteles utilizan una clase de caracteres en sus expresiones, que es un método eficaz también, pero no se está usando cualquiera en su expresión original por lo que estoy tratando de conseguir uno lo más cerca posible de ustedes explicando cada cambio menor en el camino para que se entienda mejor. ¿Cómo podemos aprender de otra manera?
O 'grep -x '[-d] rwx. * [0-9]''. – ephemient
En Linux, sí, o donde se usa GNU grep. La versión que cité funcionará en todas las variantes de Unix, lo que enviaría lo hace mejor. –
'-x' es POSIX. Bracket following dash: '[[.-.] [.].]]' (Que, concedido, es menos legible que '[] -]'). Yo * creo * esto también es POSIX ... – ephemient