Grep para filtrar e mostrar apenas o começo de uma linha

2

(usando MacOSX e pode converter isso em um script perl). Sou relativamente novo em comandos Linux / Unix e minha pesquisa no Google não foi bem-sucedida.

Estou criando um script para acelerar a busca por um registro do treinamento de alguém. A maneira como estou fazendo isso é listar os registros de treinamento do indivíduo em uma linha (talvez haja uma maneira melhor?). Quando eu uso o Grep para procurar por um nome específico, posição treinada em, ou data, ele mostra a linha inteira. Eu quero grep procurar por uma seqüência específica e mostrar apenas o início da linha, ou seja, as primeiras 2 palavras (nome / sobrenome).

O arquivo Training.txt é semelhante a este:

Ivie, Shawn Cashier 5/24/2016 Storeroom 12/2/2016 Service-Desk 11/31/2016

Allen, Adam Cashier 5/10/2016 Storeroom 12/13/2016

Martinez, Jessica Cashier 5/20/2017 Storeroom 10/29/2016 Supervisor 1/23/2016

O comando que eu uso agora é: grep "Cashier" Training.txt

que retorna todos os 3 registros, todo o conteúdo da linha de todos os registros.

Eu tentei: grep -E -o ".{0,0}Cashier.{0,5}" Training.txt

que retorna (neste exemplo, todos os 3 registros), mas mostrando zero caracteres antes de "Caixa" e 5 depois.

Cashier 5/10

Como posso incorporar um comando grep (ou talvez um comando Perl) para procurar, por exemplo, "Supervisor" e mostrar apenas as 2 primeiras palavras (nomes)? Secundário: alguma ideia que possa facilitar este tipo de processo? (A planilha não é útil nesse caso).

    
por Ivus 24.05.2017 / 17:28

2 respostas

1

Isso é perfeito para awk :

awk '/Supervisor/ { print $1, $2 }' /path/to/inputfile

Você pode restringir a pesquisa ao terceiro campo para que não obtenha um falso positivo para alguém chamado "Supervisor Bob":

awk '$3 ~ /Supervisor/ { print $1, $2 }' /path/to/inputfile
    
por 24.05.2017 / 17:30
0

Você pode usar grep com o modo Perl em:

grep -oP '^(\S+,?\s+){2}(?=Cashier\s)'

Resultados

Ivie, Shawn
Allen, Adam
Martinez, Jessica

Trabalhando

  • No modo Perl, o grep está procurando dois campos (\ S +) desde o início da linha.
  • E, no final do espaço em branco do 2º campo, se conseguirmos ver um Caixa seguido por um espaço em branco, encontramos nossa correspondência. Como a sequência do Caixa é uma solução, ela não será incluída na partida.
por 24.05.2017 / 17:43