Você pode fazer isso com apenas grep . Onde file.txt é seu arquivo e word é o texto que você quer destacar, você pode usar:
grep --color -E 'word|$' file.txt
Isso corresponde e destaca as ocorrências de word . Além disso, ele alternativamente ( | ) corresponde e destaca a string vazia no final de cada linha ( $ ). Mas como essa string está vazia, nenhum texto extra é realçado.
A combinação de $ , além de word , serve para garantir que cada linha contenha uma correspondência. Em seguida, grep imprime todas as linhas, mesmo sem as opções -A , -B ou -C ou quaisquer chamadas para outros utilitários.
O sinal -E faz com que grep interprete seu argumento padrão como uma expressão regular estendida POSIX (ERE ). Dependendo de quais caracteres estão em word , você pode querer usar uma expressão regular básica (BRE). Embora a alternância com | não seja oficialmente parte das expressões regulares básicas POSIX, grep implementations geralmente a suportam como uma extensão com \| : 1
grep --color 'word\|$' file.txt
Em particular, nos sistemas GNU / Linux você tem o GNU Grep, que suporta isso. Se você estiver confiando em --color , provavelmente poderá confiar nesse comportamento também.
Esses comandos são mais simples do que o modo na resposta de goldilocks . Mas a técnica nessa resposta tem uma vantagem distinta em algumas circunstâncias. Como os métodos aqui usam | e $ , eles precisam ser realmente expressões regulares, em vez de seqüências de caracteres fixas. No entanto, com o método goldilocks , você pode adicionar o sinalizador -F . Então, word pode conter qualquer texto que você goste, mesmo \ , desde que você cite word corretamente para garantir que o shell o transmita para grep unmodified.
Por exemplo, você pode usar:
grep --color -FC "$(wc -l < file.txt)" 'word' file.txt
Para ler mais, consulte Convença o grep a produzir todas as linhas, não apenas aquelas com correspondências (como steeldriver sugerido ).
1 Em relação ao padrão (IEEE Std 1003.1-2008) especifica que a alternação é um recurso do ERE (via | ), mas não é um um recurso do BRE. Mas as implementações são permitidas para interpretar \| como desejarem, e muitas interpretam como alternância:
Some implementations have extended the BRE syntax to add alternation.
For example, the subexpression "\(foo$\|bar\)" would match either
"foo" at the end of the string or "bar" anywhere. The extension is
triggered by the use of the undefined "\|" sequence.