no bash, se eu quiser executar um comando e exibir apenas linhas de saída que correspondam a um determinado padrão, posso canalizá-lo para grep
, como
arquivo testfile
hello
there
my
friends
comando
$ cat testfile | grep 'hello'
hello #this will be highlightd
isso destacará a correspondência de pesquisa e exibirá toda a linha em que ela se encaixa. Eu posso usar -A
e -B
exibir linhas antes e depois dessa linha. Minha pergunta é: é possível executar o comando e exibir todas as saídas normalmente, mas destacar as correspondências de pesquisa como grep faria? então minha saída seria
hello #highlighted
there
my
friends
linux
command-line
bash
grep
ewok
fonte
fonte
Respostas:
Para usar um Color GREP para destacar apenas padrões correspondentes, mas sem alterar a saída:
O primeiro padrão corresponderá a todas as linhas (todas as linhas serão impressas); o segundo padrão (e qualquer outro padrão a seguir) fará com que o texto correspondente seja destacado em cores.
Como o primeiro padrão corresponde a todas as linhas, mas não corresponde a um caractere imprimível, ele não adiciona nenhum destaque de cor para não competir / interferir na legibilidade do texto destacado.
fonte
kubectl apply -k . | grep --color=always -e "^" -e "configured"
em zsh"^"
precisa ser o segundo).Adicione opção
-z
ao seu comando GNU grep:ou mais curto
fonte
grep --color "hello\|$" file
Da mesma forma que a resposta anterior, você pode pegar todo o
$
final das linhas:-E
(ou--extended-regexp
) significa que caracteres especiais devem ser escapados\
. Ao usá-lo,|
será tratado como condição regex "OR".O Grep
|$
também captura e imprime todas as linhas que terminam, mas como $ é um caractere oculto, ele não pode ser destacado.Atualizar:
Se você deseja imprimir toda a saída, mas também retornar o código de saída , se a correspondência foi encontrada ou não, você pode usar o comando perl:
Se você preferir sed - Veja um exemplo de como destacar todas as correspondências + retornar o código de saída se nenhuma correspondência for encontrada: https://askubuntu.com/a/1200851/670392
fonte
Este funciona com o GNU grep e com o grep no FreeBSD:
Corresponde ao texto "olá" ou (
\|
) a sequência nula não imprimível no final de cada linha ($
). É por isso que cada linha é impressa, mas apenas "olá" é destacado.Provavelmente, você já
--color=auto
configurou em seu shell. Então você provavelmente não precisa especificar--color=always
:Você também pode usar uma versão mais simples usando
egrep
(com expressões regulares estendidas), onde|
a expressão "ou" não precisa ser escapada:fonte
Adicionando à resposta superior acima. A função de destaque {} mencionada nos comentários só funciona quando os dados são canalizados para ela. O alias a seguir, embora não seja perfeito, é mais útil:
Isso funciona com comandos como:
fonte