Grep para filtrar y mostrar solo el comienzo de una línea

Grep para filtrar y mostrar solo el comienzo de una línea

(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 grepcon el Perlmodo 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.

información relacionada