Usando sed
:
$ sed -f script.sed file
dn : Does not matter
uid=321 456 678
foo=/234
bar=/456
git=/543
dn : Does it matter
uid=321 456 678
foo=/543
bar=/423
git=/501
... onde script.sed
é
H # Append a newline and the current line to the hold space
/^$/bout # Empty line: branch to ':out'
$bout # Last line: branch to ':out'
d # Delete line, start again from the top
:out
x # Swap in the data from the hold space
/uid.*uid/d # Delete the data if it contains two "uid"
s/\n// # Remove the first embedded newline
# (implicit print)
Isso coleta as linhas de leitura no "espaço de espera" (um buffer de uso geral em sed
) e quando atinge uma linha vazia ou o final da entrada, o espaço de espera contém um dos "blocos" no original Arquivo. Se tal bloco contiver duas instâncias da string uid
, ele será descartado, caso contrário, será gerado.