Para receber 20 caracteres antes e depois da partida

14

Tenho o problema de obter muitas informações após a partida para

grep -RnisI --color=auto "pseudomonas" *

Quero ter apenas 20 caracteres ou 10 palavras antes e depois da partida.

Qual é a ferramenta certa para fazer isso?

Léo Léopold Hertz 준영
fonte
1
Seu conjunto de opções é um pouco estranho ao reclamar de muita informação. Você quer uma linha antes e depois da partida ( e resp.), Mas é demais? Onde exatamente você deseja que sua produção seja cortada? -A1-B1
Andreas Wiese
1
Você pode dar um exemplo de entrada e a saída que está esperando?
Ramesh 25/03
Alterei o comando, testei no Ubuntu 13.10, deixe-me saber se funciona para você. Eu tenho uma opção de grep e uma opção egrep
Eric
Veja também Contexto da expressão regular correspondente
Stéphane Chazelas

Respostas:

23
cat file.txt | grep -o -P '.{0,20}string.{0,20}'

Isso deve fazer isso por você

Atualizar:

Se você não deseja cat, basta usar o grep com o arquivo como parâmetro:

grep -o -P '.{0,20}pseudomonas.{0,20}' FileName.html

Além disso, o -P usa o Perl Regex, que as páginas de manual dizem ser experimental; se você quiser evitar esse sinalizador, poderá usar o egrep:

grep -Eo '.{0,20}yourstring.{0,20}' yourtestfile.txt
Eric
fonte
O que um arquivo de teste feio você tem;)
Ouki
O restante do arquivo é realmente realmente útil, que faz parte de um comentário de várias linhas no meio de um esquema que teve que ser excluído sem interromper nosso analisador; era apenas uma boa linha para tentar.
Eric
Como é um dos meus arquivos, está definido como 755, mas posso ver como o gato pode não ser ideal para um arquivo HTML, tente passar o nome do arquivo para grep como parâmetro, veja minha edição.
Eric
Quero dizer, com 777 arquivos, que você tem 777 cópias de arquivos diferentes, não a coisa do chown. Eu corro $$$ egrep -o '. {0,20} pseudomonas. {0,20}' * $$$. O comando fica lá no infinito e não faz nada. Isso parece funcionar novamente $$$ egrep -ori '. {0,20} pseudomonas. {0,20}' * $$$. O mesmo com recursão e não diferencia maiúsculas de minúsculas. No entanto, é muito lento. Eu acho que não deve ser tão lento. O Grep foi consideravelmente mais rápido.
Léo Léopold Hertz # 26/14
se catting não funcionar, você pode sempre colocá-lo em um arquivo adicionando > results.txtao final do seu comando, mas não vou dizer qual arquivo que você encontrou no.
Eric
4
pcregrep -MnirIso '(?s).{0,20}pseudomonas.{0,20}' . |
  grep --color -e '^' -e pseudomonas

Supõe correspondências e seu contexto não se sobrepõe e que os nomes de arquivos não contêm pseudomonas.

Observe também que os números de linha relatados são os do início do contexto.

Stéphane Chazelas
fonte