Que tal juntar pares adjacentes de linhas e depois usar uma referência anterior para encontrar o prefixo não exclusivo?
$ sed '$!N; /\(.*\)\n:FOO/D; P;D' file
red.7
green.2:FOO
blue.6
yellow.9:FOO
Explicação:
-
$!N- se ainda não estivermos na última linha, anexe a próxima linha ao espaço padrão, separado por uma nova linha -
/\(.*\)\n- corresponde tudo à nova linha (ou seja, o primeiro de cada par de linhas) e salva-o em um grupo de captura -
:FOOagora corresponde ao que foi capturado na primeira linha, seguido por:FOO(é uma referência anterior ao primeiro grupo de captura) -
/\(.*\)\n:FOO/D- se a segunda linha de cada par for igual à primeira, seguida por:FOO, entãoDelete a primeira -
Print eDeletam a linha restante pronta para iniciar o próximo ciclo
ou mais puro (obrigado @don_crissti)
sed '$!N; /\(.*\)\n:FOO/!P;D' file
Nmeans there are always two consecutive lines in the pattern space and sedPrints the first one of them only if the second line isn't the same as the first one plus the suffix:FOO. ThenDremoves the first line from the pattern space and restarts the cycle.