Foros del Web » Administración de Sistemas » Unix / Linux »

[SOLUCIONADO] Filtrar contenido de un archivo htpasswd

Estas en el tema de Filtrar contenido de un archivo htpasswd en el foro de Unix / Linux en Foros del Web. Hola a todos los foristas: Tengo un archivo de contraseñas para apache el cual generé con la utilería htpasswd, el cual tiene más o menos ...
  #1 (permalink)  
Antiguo 11/09/2015, 11:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Filtrar contenido de un archivo htpasswd

Hola a todos los foristas:

Tengo un archivo de contraseñas para apache el cual generé con la utilería htpasswd, el cual tiene más o menos la siguiente estructura:

Código:
cat /home/usuarios

usuario.uno:$apr1$NlvPkasd1d25a!#$zn$gSeZXgsdafqwerwgeMdxkpn4s2KL1.
usuario.dos:$apr1$zPI.Iuasdfbvb23#$"Sw2134$qfpElhdfa1IgfeBa2gJ.pcKmfH1
usuario.tres:$apr1$JsJRwa36$!"#$RGlQKqwerR/JN86WlasfddkYjgFQ/
Lo que quiero hacer es listar todos los usuarios que están contenidos en este archivo, sin mostrar su contraseña encriptada, es decir, filtrar hasta el caracter (:),

Código:
usuario.uno
usuario.dos
usuario.tres
haciendo pruebas con el comando grep, encontré un patrón que casi me funciona

Código:
cat /home/usuarios | grep -oE '.*:'
Este comando me regresa

Código:
usuario.uno:
usuario.dos:
usuario.tres:
Es decir, lo único que me faltaría sería quitar el caracter que está al final de cada linea. Espero que alguno de ustedes me pueda auxiliar en la construcción de la expresión regular para filtrar lo que necesito.

Saludos y gracias anticipadas.
Leo.
  #2 (permalink)  
Antiguo 11/09/2015, 11:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Filtrar contenido de un archivo htpasswd

Bueno, encontré una solución aunque no sé si sea la más óptima...

Sería así:

Código:
cat /home/usuarios | grep -oE '.*:' | sed 's/://'
Si alguien tiene alguna otra forma más simple para obtener la salida que espero, me encantaría conocerla.

Saludos
  #3 (permalink)  
Antiguo 14/09/2015, 09:11
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Filtrar contenido de un archivo htpasswd

Primero que nada, buen trabajo: has conseguido algo que te sirve utilizando las herramientas disponibles en la shell :)

Segundo, el problema se soluciona más fácil:
Código BASH:
Ver original
  1. cut -d: -f 1 /home/usuarios

awk y sed pueden hacer cosas similares, pero cuando funciona, cut es mucho más sencillo. El problema es que no se lleva bien con líneas que contienen más de un separador seguido, como puede ser la salida de "ls" si usamos el espacio en blanco como separador.

También te comento que casi todos los filtros (programas que toman entrada desde STDIN, la procesan, y la devuelven en STDOUT, como grep, cut, awk, sed y otros) aceptan pasarles un nombre de archivo:
Código BASH:
Ver original
  1. grep -oE ".*:" /home/usuarios
funciona de la misma manera y no necesitas usar cat.

Para terminar, casi siempre hay más de una manera de hacer lo mismo cuando procesamos texto, esto es porque si bien cada herramienta tiene su propósito, en casos simples como éste hay varias que pueden dar el mismo resultado. Las siguientes líneas hacen lo mismo que el "cut" de arriba:
Código BASH:
Ver original
  1. ~$ awk -F: '{ print $1 }' /home/usuarios # hace lo mismo que cut (awk es un lenguaje de programación completo)
  2. ~$ grep -oE "^[^:]*" /home/usuarios # busca los trozos de la línea hasta el primer ":"
  3. ~$ sed 's/:.*$//' /home/usuarios # elimina de la línea todo lo que haya luego del primer ":"
  4. ~$ while read LINEA; do echo ${LINEA%%:*}; done < /home/usuarios # equivalente al "sed" anterior, pero en bash/ksh puro


Saludos.
  #4 (permalink)  
Antiguo 21/09/2015, 09:59
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Filtrar contenido de un archivo htpasswd

Muchas gracias AlvaroG:

Ahora si, como lo que haz comentado queda demostrado aquel dicho que dice que hay muchas formas de matar una mosca, pero utilizar una pistola puede resultar demasiado :D

Excelente aportación, voy a considerar todas las distintas formas que me indicaste y seguiré practicando para encontrar funcionalidades adicionales para cada uno de los comandos.

Saludos cordiales
Leo

Etiquetas: contenido, filtrar, htpasswd
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:52.