(usando MacOSX y puede convertirlo a un script en Perl). Soy bastante nuevo en los comandos de Linux/Unix y mi búsqueda en Google no ha tenido éxito.
Estoy creando un script para agilizar la búsqueda de un registro del entrenamiento de alguien. La forma en que hago esto es enumerar los registros de entrenamiento del individuo en una línea (¿quizás haya una manera mejor?). Cuando uso Grep para buscar un nombre específico, puesto de capacitación o fecha, muestra la línea completa. Quiero buscar con grep una cadena específica y mostrar solo el comienzo de la línea, es decir, las 2 primeras palabras (nombre/apellido).
El archivo Training.txt es similar a este:
Ivie, Shawn Cajero 24/05/2016 Almacén 2/12/2016 Mostrador de servicio 31/11/2016
Allen, Adam Cajero 10/05/2016 Almacén 13/12/2016
Martinez, Jessica Cajera 20/05/2017 Almacén 29/10/2016 Supervisor 23/01/2016
El comando que uso ahora es:
grep "Cashier" Training.txt
que devuelve los 3 registros, el contenido completo de la línea de todos los registros.
He intentado:
grep -E -o ".{0,0}Cashier.{0,5}" Training.txt
que devuelve (en este ejemplo, los 3 registros) pero muestra cero caracteres antes de "Cajero" y 5 después.
Cashier 5/10
¿Cómo puedo incorporar un grep (o quizás un comando Perl) para buscar, por ejemplo, "Supervisor" y mostrar solo las 2 primeras palabras (nombres)? Secundario: ¿alguna idea que pueda facilitar este tipo de proceso? (La hoja de cálculo simplemente no es útil en este caso).
Respuesta1
Esto es perfecto para awk
:
awk '/Supervisor/ { print $1, $2 }' /path/to/inputfile
Incluso puedes restringir la búsqueda al tercer campo para no obtener un falso positivo para alguien llamado "Supervisor Bob":
awk '$3 ~ /Supervisor/ { print $1, $2 }' /path/to/inputfile
Respuesta2
Puedes usar grep
con el Perl
modo encendido:
grep -oP '^(\S+,?\s+){2}(?=Cashier\s)'
Resultados
Ivie, Shawn
Allen, Adam
Martinez, Jessica
Laboral
- En modo Perl, grep busca dos campos (\S+) desde el principio de la línea.
- Y al final del espacio en blanco del segundo campo, si podemos ver un Cajero seguido de un espacio en blanco, hemos encontrado nuestra coincidencia. Dado que la cadena Cajero es una opción, no se incluirá en la coincidencia.