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 -
:FOO
agora 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ãoD
elete a primeira -
P
rint eD
eletam a linha restante pronta para iniciar o próximo ciclo
ou mais puro (obrigado @don_crissti)
sed '$!N; /\(.*\)\n:FOO/!P;D' file
N
means there are always two consecutive lines in the pattern space and sedP
rints the first one of them only if the second line isn't the same as the first one plus the suffix:FOO
. ThenD
removes the first line from the pattern space and restarts the cycle.