É isso que você quer?
$ sed 's/\(^\| \)test3\( \|$\)//g' file
test3.legacy test4.legacy test3.kami
Isso diz
substitute
(^ start of line OR space)
test3
(space OR end of line)
with match 1 (AKA space or start of line)
Atualização:
E como tão bem colocado pelos bons @Stephane Chazelas isso não cuidaria de certos casos . Também enfatize a parte da portabilidade. Veja resposta abaixo .
Uma variante GNU poderia, (esperançosamente) , ser:
sed 's/\(^\| \)\(test3\( \|$\)\)*//g'
# Or perhaps:
sed 's/\(^\| \)\(test3\( \|$\)\)\+//g'
cuidando de correspondências repetitivas. Opcionalmente, um cuidaria de múltiplos espaços etc também. Dependendo da entrada.
EOUPD
Como uma alternativa talvez ( significa apenas como um ponto de partida ):
sed 's/\Wtest3\W/ /g'
Não é isso que eu assumo:
$ sed 's/test3\.\?[^ ]* *//g' file
test4.legacy