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
).