Eu só queria adicionar minha solução para obter o inverso de grep dog -B 1
:
cat file | grep "$(cat file | grep dog -B 1)" -v
Que retorna bird
ao contrário do que cat file | grep dog -B 1
produz.
Parece que meu problema original era apenas entender mal como isso deveria funcionar. Eu estava pensando em aplicar -v
iria simplesmente inverter qualquer comando grep
.
Na verdade parece que o -v
flag foi executado primeiro e depois -B 1
é aplicado depois, então todas as linhas que não contêm dog
são retornadas e todas as linhas 1 antes dessas linhas, significando todas as linhas.
Edit: percebi que esta solução está errada. Não inverte porque o segundo grep usando o sub-shell não trata "$(cat file | grep dog -B 1)"
como um único bloco de texto. Em vez disso, cada linha gerada é tratada como um grep diferente.
Se a subshell incluir:
cat
dog
E o arquivo original inclui outras instâncias de cat
que não são 1 posição antes de dog
, elas serão removidas para essa solução.