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.