Existe alguma maneira de dizer ao grep para imprimir todas as linhas que estão sendo lidas, independentemente de haver uma correspondência?
Option -C999fará o truque na ausência de uma opção para exibir todas as linhas de contexto. A maioria das outras variantes do grep também suporta isso. Entretanto: 1) nenhuma saída é produzida quando nenhuma correspondência é encontrada e 2) essa opção tem um impacto negativo na eficiência do grep: quando o-C valor é grande, muitas linhas podem precisar ser temporariamente armazenadas na memória do grep para determinar quais linhas de contexto para exibir quando ocorrer uma correspondência. Observe que as implementações grep não carregam arquivos de entrada, mas lê algumas linhas ou usam uma janela deslizante sobre a entrada. A "parte anterior" do contexto deve ser mantida em uma janela (memória) para gerar as linhas de contexto "anterior" mais tarde, quando uma correspondência for encontrada.
Um padrão como ^|PATTERNou PATTERN|$ou qualquer sub-padrão de correspondência vazia, por exemplo, [^ -~]?|PATTERNé um bom truque. No entanto, 1) esses padrões não mostram linhas não correspondentes destacadas como contexto e 2) isso não pode ser usado em combinação com outras opções de grep, como -Fe -wpor exemplo.
Portanto, nenhuma dessas abordagens me satisfaz. Estou usando o ugrep e o grep aprimorado com a opção -yde exibir com eficiência todas as saídas não correspondentes como linhas de contexto destacadas em cores. Outras ferramentas do tipo grep, como ag e ripgrep, também oferecem uma opção de passagem. Mas o ugrep é compatível com o GNU / BSD grep e oferece um superconjunto de opções de grep como -ye -Q. Por exemplo, eis a opção -ymostrada quando combinada com -Q(UI de consulta interativa para inserir padrões):
ugrep -Q -y FILE ...
sed. asedsolução oferece várias cores ao custo de maior complexidade (em vez de cerca de 30 caracteres, você tem cerca de 60 caracteres).