Seu primeiro. * está parando no "dia", deixando sua referência anterior vazia. Você precisa de algo definido para corresponder antes de seu [[: alpha:]] em sua referência anterior. por exemplo. um espaço,
$ echo $regex
\([[:alpha:]]*\)day
$ echo $phrase
it is Saturday tomorrow
$ echo $phrase | sed "s/.* $regex.*//"
Satur
Eu amo e odeio regexes.
editar:
A extensão não POSIX da palavra limite (\ b) parece capturar os dois casos:
$ regex="\b\([[:alpha:]]\+\)day\b"
Não sei como lidar com a situação em que o padrão aparece várias vezes ou se houver várias palavras no seu padrão.
$ cat phrase.txt
it is Saturday tomorrow
it is Saturday tomorrow
Saturday is the date tomorrow
Saturday is the date tomorrow
Saturday is the day tomorrow
Saturday is the day tomorrow
Saturday is the day in dayton tomorrow
Saturday is the day in dayton tomorrow
Saturday is the day after Friday
The last day of the week is Friday
$ cat phrase.txt | sed -e "s/.*$regex.*//"
Satur
Satur
Satur
Satur
Satur
Satur
Satur
Satur
Satur
Fri
Estou curioso para saber se alguém que tem mais sed-fu dá uma resposta melhor. : -)