Ver Mensaje Individual
  #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.