Para alterar o conteúdo do arquivo file.list da maneira que você descreve:
sed 's/\.bed *$//' file.list >file.list.tmp && mv file.list.tmp file.list
Isso funcionaria com qualquer implementação de sed (o sinalizador de linha de comando -i é notoriamente não-portátil entre sed implementations). Ele grava o resultado em um arquivo temporário e, se nenhum erro ocorrer (como a falta de espaço em disco), o arquivo original é substituído por esse arquivo temporário.
A expressão s/\.bed *$// removerá a string .bed do final de cada linha. Também permite espaços à direita (estes também serão removidos).
Para renomear os arquivos listados em file.list , assumindo um nome de arquivo por linha:
while IFS= read -r name; do
echo mv "$name" "${name%.bed}"
done <file.list
O echo impede que a renomeação realmente aconteça, você deve executar isso com ela no lugar uma vez primeiro para ver se está funcionando.
A substituição de variável ${name%.bed} removerá .bed do final do valor $name (que é uma linha lida de file.list ).