Eu tenho uma linha chamada
10909101 - testingName - Log8767, File787 - 8:50PM
Agora eu só quero usar grep para obter testingName
minha saída.
O primeiro número pode variar em termos de número de dígitos (outra linha pode ser 12
o 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 grep
foi 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