Como usar o sed para imprimir parte de uma string contendo hashes (ou qualquer solução alternativa)?

1

Estou tentando imprimir uma string específica em uma linha com sed.

O primeiro problema é que eu tenho algumas dificuldades em encontrar uma string que contém slashes, eu já tentei algumas soluções fornecidas em outros tópicos mas não tive sucesso, espero que alguém possa me ajudar.

Eu tenho um arquivo chamado output.log.

Um exemplo de uma linha é:

013-11-08 19:45:52 evtlog.bad PROD/INSE/6004113 2012-11-08 19:04:06 /test11/golf/TierTwo/2013-11/evtlog.log

Portanto, com o sed eu quero imprimir apenas abaixo da string desta linha:

/test11/golf/TierTwo/2013-11/evtlog.log

E eu quero encontrar a string nesta linha com: "golf / TierTwo / 2013-11"

Então, eu usaria por exemplo:

sed 'golf/TierTwo/2013-11' output.log

E obtenha uma saída de:

/test11/golf/TierTwo/2013-11/evtlog.log

Como posso conseguir isso?

Se houvesse uma solução melhor em vez de sed, seria bem-vinda também. Meu objetivo é usar isso em um script, seja bash ou perl

    
por Flemx 20.09.2016 / 09:52

3 respostas

0

Se o seu grep suportar o sinal -o ou --only-matching , você poderá usar o barbante para a string, cercado por qualquer caractere contíguo que não seja espaço em branco

grep -o '[^[:blank:]]*golf/TierTwo/2013-11[^[:blank:]]*' output.log
/test11/golf/TierTwo/2013-11/evtlog.log

ou (se ele suportar a classe perl-style \S )

grep -Eo '\S*golf/TierTwo/2013-11\S*' output.log
/test11/golf/TierTwo/2013-11/evtlog.log
    
por 20.09.2016 / 14:32
1

Use awk em vez de sed:

awk 'index($0,"golf/TierTwo/2013-11")>0 { print $7 }' output.log

isto irá procurar a string em cada linha, se um índice for encontrado a 7ª palavra será impressa.

    
por 20.09.2016 / 09:55
0
perl -naE 'say $F[6] if m!golf/TierTwo/2013-11!' logfile

perl -nae faz o perl se comportar de um jeito estranho ...

    
por 20.09.2016 / 11:46