Eu não acho que o que eu estava tentando fazer é possível se eu encadear os comandos 2 grep (já que as linhas de contexto são relativas a cada comando individual grep ).
Ocorreu-me que um lookahead negativo pode ser o que eu quero. Então tudo pode ser feito com um único comando grep .
Para minha surpresa, parece que o GNU grep realmente tem suporte para regex lookbehind / lookahead - mas apenas se você usar a opção --perl-regex .
Aqui está um comando grep que me fornece o que eu estava procurando:
⟫ grep --perl-regexp 'created_at(?!(.*precision:))' schema.rb -B3
create_table "things", id: :serial, force: :cascade do |t|
t.string "other_column"
# ...
t.datetime "created_at"