Quando uso, por exemplo cat file.txt | grep --color=tty "pattern"
, obtenho o padrão que busco realçado. Quando eu quero um pouco mais de contexto em torno de cada ocorrência, o grep possui os parâmetros -A
, -B
e -C
.
No entanto, quero exibir o arquivo inteiro (ou qualquer outra saída de comando) e destacar um determinado padrão. Existe um comando ou ferramenta de destaque?
linux
command-line
DerMike
fonte
fonte
Respostas:
Havia uma resposta no unix.stackexchange.com que tinha esse truque:
ou
que corresponde ao seu padrão ou ao final da linha em cada linha. Somente o padrão é destacado.
fonte
GREP_OPTIONS='--color'
ao~/.bashrc
(ou modifique a configuração para incluir--color
). Você precisará iniciar um novo terminal ou executar essa atribuição na linha de comando no terminal atual para que ela entre em vigor.Eu gosto de ack .
É como grep, mas melhor. Ele destaca por padrão e, com a
--passthru
opção, mostra o arquivo inteiro (ou entrada padrão) em vez de apenas as linhas correspondentes.fonte
tail
, from , também precisará usar a--filter
opção. Por exemplo:tail -f myLogFile | ack --filter --passthru pattern
Também recomendo o uso de
less
(ou tal), mas quero mostrar uma solução mais didática. Depois de definir esta função:Você pode usá-lo desta maneira:
Nota: Esta versão faz distinção entre maiúsculas e minúsculas, para alterar isso apenas
i
depoisg
dased
expressão.fonte
tput
vez de codificar os valores. Dessa forma, você também evita o usoecho -e
, o que pode ter outros efeitos.prog | highlight "pattern"
ouhighlight "pattern" file
:highlight () { local file=${2:--}; sed "s/$1/$(tput smso)&$(tput rmso)/gi" "$file"; }
sed
habilidades são basicamente inexistentes. Como eu teria que mudar isso para corresponder ao padrão que diferencia maiúsculas de minúsculas. De qualquer forma, adicionarei esse item às minhas funções bash_funções. Muito obrigado.Passar
-C
paragrep
com um valor suficientemente alto fará isso.fonte
less
está destacando o padrão, entãoou
e depois em menos,
/
para procurar um padrão que será destacado.Nota:
Você pode melhorar seu comando, por exemplo,
definir alias
alias grep="grep --color=tty"
e usá-lo assim:fonte
grep
(zgrep, bzgrep, bzfgrep, etc.) Portanto, se você deseja que todas as formas de grep se comportem de maneira consistente, será necessário definir um alias para cada forma de grep. A nova resposta do @ Casual acima não servirá para algo comobzgrep pattern /var/log/messages.?.gz
, que é um exemplo em que o realce de cores é MUITO útil.Existe uma boa ferramenta supercat , que serve exatamente para esse propósito. Ele pode colorir a saída do console e produzir um html "destacado" a partir da entrada.
fonte
/etc/supercat
Ubuntu), que configuram as regras de coloração, são basicamente pares color / regexp (com algumas regras extras); A página de manual também é curta e agradável.spcrc
arquivo de sintaxe vim em vim.org/scripts/script.php?script_id=2676