我有一个包含.bed
files 的列表“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
$name
file.list
答案2
在我看来,您在 file.list 中有一个文件列表,您只想重命名那些具有 .bed 后缀的文件并从实际文件中删除?
xargs -d'\n' -a file.list rename -n 's/\.bed$//'