(usando MacOSX e pode converter isso em um script perl). Sou bastante novo nos comandos Linux/Unix e minha pesquisa no Google não teve êxito.
Estou criando um script para agilizar a busca por um registro do treinamento de alguém. A forma como estou fazendo isso é listando os registros de treinamento do indivíduo em uma linha (talvez haja uma maneira melhor?). Quando uso o Grep para procurar um nome específico, posição treinada ou data, ele mostra a linha inteira. Quero fazer uma busca grep por uma string específica e mostrar apenas o início da linha, ou seja: as 2 primeiras palavras (Nome/Sobrenome).
O arquivo Training.txt é semelhante a este:
Ivie, Shawn Caixa 24/05/2016 Almoxarifado 02/12/2016 Balcão de atendimento 31/11/2016
Allen, Adam Caixa 10/05/2016 Almoxarifado 13/12/2016
Martinez, Jessica Caixa 20/05/2017 Almoxarifado 29/10/2016 Supervisor 23/01/2016
O comando que 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 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 esse tipo de processo? (A planilha simplesmente não é útil neste caso).
Responder1
Isso é perfeito para awk
:
awk '/Supervisor/ { print $1, $2 }' /path/to/inputfile
Você pode até restringir a pesquisa ao terceiro campo para não obter um falso positivo para alguém chamado "Supervisor Bob":
awk '$3 ~ /Supervisor/ { print $1, $2 }' /path/to/inputfile
Responder2
Você pode usar grep
com o Perl
modo ativado:
grep -oP '^(\S+,?\s+){2}(?=Cashier\s)'
Resultados
Ivie, Shawn
Allen, Adam
Martinez, Jessica
Trabalhando
- No modo Perl, grep procura dois campos (\S+) desde o início da linha.
- E estando no final do espaço em branco do 2º campo, se conseguirmos ver um Caixa seguido de um espaço em branco, encontramos a nossa correspondência. Como a string do Caixa é apenas uma olhada, ela não será incluída na correspondência.