Así que sé que existen herramientas para este problema porque he oído hablar de ellas, pero no sé cuáles son.
Quiero hacer algo como filtrar todos los datos excepto los nombres de usuario en / etc / passwd.
Por ejemplo, me gustaría tomar user1, user2 y user3 del siguiente archivo. En este caso, la lógica podría ser "Capturar texto hasta el primer ':' en cada línea del archivo".
user1:x:1:4
user2:x:2:5
user3:x:3:6
El resultado sería:
user1
user2
user3
awk
toma un nombre de archivo, para que pueda saltear la tubería y simplemente hacerloawk -F: '{print $1}' /etc/passwd
tr
yat
son un par de ejemplos de las pocas cosas que no lo hacen).Aquí hay una línea de Perl:
fuente
Debajo de perl y awk, hay una tercera herramienta para tales trabajos, que es sed:
Este es el comando de sustitución: sustituto de dos puntos:, seguido de un punto, que es un comodín para caracteres de cualquier tipo, de cualquier cuenta (*), sin nada.
Es 's (ubstitute) / FROM / TO /' con TO vacío, lo que significa 'eliminar todo desde el primer colon (ya que sed es codicioso por defecto) (hasta el final de la línea, ya que sed funciona bien con líneas enteras).
Por supuesto,
cut
es un buen comando también, pero diría que de una familia diferente.fuente
En su ejemplo, los 3 nombres tienen la misma longitud. En tales casos, lo que podría suceder, pero no es tan probable con / etc / passwd, también puede usar colrm:
o por supuesto
(un caso raro en el
useless use of cat
que no se aplica, porque no se puede colmar un ARCHIVO para actuar como parámetro).fuente
cat
sigue siendo inútil allí:colrm 6 < FILE
.cat foo | grep bar
.Solo para completar, no hay necesidad de comandos externos, el shell (Bourne shell o compatible) puede manejarlo solo:
Por supuesto, esta es probablemente la solución más lenta posible, por lo que para archivos de gran tamaño, elija otra.
fuente