Como usar o grep para alfabetos seguidos de um espaço e um sinal de pontuação?

Como usar o grep para alfabetos seguidos de um espaço e um sinal de pontuação?

Eu tenho uma linha chamada

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

Agora eu só quero usar grep para obter testingNameminha saída.

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

Responder1

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 erro - não foi para isso que grepfoi projetado, e uma ferramenta muito melhor é awk.

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

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

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

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

que simplesmente pega tudo do primeiro -ao segundo, inclusive os espaços, e remove os espaços via tr. Claro, se você tiver espaços em seus nomes de arquivos, isso causaria problemas, e você vai querer seguir o primeiro exemplo.

Responder2

Isso usadoisinstâncias de grep, mas éépuro grep:

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

Saída:

testingName

informação relacionada