obtém texto entre palavras-chave no arquivo de log

7

Se eu tiver um arquivo de log e quiser despejar apenas o texto entre 1234 e 9876 em outro arquivo, como posso fazer isso facilmente?

Se eu tiver um arquivo de texto como este:

idsfsvcvs sdf sdf e e  sd vs d s g sg  s vc  d

slkdfnls 1234 keep me text 9876 das a g w eg dsf sd fsdf
sdfs fs dfsdf
sdfsdf sdf
sdf s fs
dfsf ds

Eu quero fazer algo assim

$ getinfo "1234" "9876" log

$ cat log

mantenha-me texto

    
por Darkmage 30.01.2012 / 12:27

4 respostas

10

Uma linha de sed pode fazer isso para você:

sed -n 's/.*1234 \(.*\)9876.*//p' textfile.txt > log

    
por 30.01.2012 / 12:58
2

normalmente você pode fazer isso com grep e o -o param.

-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. 

então seria algo como:

 grep -Po '1234.*9876' >> log

Não tenho 100% de certeza sobre o regex btw, não testei

    
por 30.01.2012 / 12:37
1

Isso depende do conteúdo do seu arquivo. Você pode começar por algo simples como:

$ grep 1234 logfile | grep 9876 | cut -d ' ' -f 3,4,5

Isso funciona para o exemplo fornecido. Você pode trabalhar nele para cobrir outros formatos de dados, se necessário. Você também pode redirecionar a saída para um arquivo adicionando > /path/to/output

    
por 30.01.2012 / 12:36
0

Por que vale a pena, eu faria o seguinte:

  1. grep 1234.*9876 > myfile
  2. vim myfile
  3. :%s/^.*1234// (apaga tudo até 1234)
  4. :%s/9876.*$// (apagar tudo depois e incluindo 9876)

Não perfeito, ou o melhor caminho, mas fácil de lembrar se você costuma usar o vim.

    
por 30.01.2012 / 17:56