Remover extensão de arquivos dentro de uma lista

0

Eu tenho uma lista "file.list" que contém .bed arquivos. Eu quero remover a extensão .bed do arquivo "file.list"

Eu tentei sed -i 's/.bed//g' file.list , mas isso não funciona.

    
por Aadhira 12.09.2017 / 05:32

2 respostas

1

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

    
por 24.09.2017 / 16:22
0

Isso me parece que você tem uma lista de arquivos dentro de um arquivo.list que você só quer renomear os arquivos que têm sufixo .bed e remover arquivos reais?

xargs -d'\n' -a file.list rename -n 's/\.bed$//'
    
por 12.09.2017 / 05:44

Tags