Como grep para alfabetos seguido por um espaço e um sinal de pontuação?

0

Eu tenho uma linha chamada

10909101 - testingName - Log8767, File787 - 8:50PM  

Agora, só quero usar o grep para obter testingName como minha saída.

O primeiro número pode variar em termos de número de dígitos (outra linha pode ter 12 como primeiro número), então não posso usar nenhum grep baseado em números. Então, como resolvo isso?

    
por posixKing 29.09.2016 / 02:36

2 respostas

3

Dado que todos os dados serão formatados de forma idêntica, grep é a ferramenta errada para isso. É utilizável, certamente, mas usá-lo é um kludge - não é para isso que o grep foi projetado, e uma ferramenta muito melhor é awk .

Como o seu delimitador sempre será uma sequência "espaço, traço, espaço", por exemplo, - , você pode fazer isso:

$ awk -F' - ' '{print $2}' <filename>

onde <filename> é o nome do arquivo com os dados que você está pesquisando e você obterá todas as linhas do arquivo inteiro aparadas para apenas a segunda entrada. Se você não gosta de usar um delimitador de três caracteres, pode fazer isso:

$ awk -F- '{print $2}' | tr -d ' '

que simplesmente pega tudo, desde o primeiro - até o segundo, incluindo os espaços, e remove os espaços via tr . Claro, se você tem espaços em seus nomes de arquivos, isso causaria problemas, e você vai querer manter o primeiro exemplo.

    
por 29.09.2016 / 03:21
0

Isso usa duas instâncias de grep , mas é puro grep :

echo '10909101 - testingName - Log8767, File787 - 8:50PM  ' | \
grep -o '\- [[:alpha:]]* \-' | grep -o '[[:alpha:]]*'

Saída:

testingName
    
por 29.09.2016 / 02:59