删除列表中文件的扩展名

删除列表中文件的扩展名

我有一个包含.bedfiles 的列表“file.list”。我想.bed从“file.list”文件中删除扩展名

我尝试过sed -i 's/.bed//g' file.list,但这不起作用。

答案1

file.list要按照您描述的方式更改文件的内容:

sed 's/\.bed *$//' file.list >file.list.tmp && mv file.list.tmp file.list

这适用于任何实现sed-i众所周知,命令行标志在实现之间不可移植sed)。它将结果写入临时文件,如果没有发生错误(例如磁盘空间不足),则原始文件将被该临时文件替换。

该表达式将从每行末尾s/\.bed *$//删除字符串。.bed它还允许尾随空格(这些也将被删除)。


重命名实际的文件中列出file.list,假设每行一个文件名:

while IFS= read -r name; do
    echo mv "$name" "${name%.bed}"
done <file.list

echo会阻止重命名实际发生,您应该首先在适当的位置运行它一次,看看它是否有效。

变量替换将从值的末尾${name%.bed}删除(这是从 读取的一行)。.bed$namefile.list

答案2

在我看来,您在 file.list 中有一个文件列表,您只想重命名那些具有 .bed 后缀的文件并从实际文件中删除?

xargs -d'\n' -a file.list rename -n 's/\.bed$//'

相关内容