bash - 仅从文件名中删除最后一个扩展名

标签 bash file edit tcsh

我的文件名看起来与此类似

name_1.23.ps.png

或者
name_1.23.ps.best

或者
name_1.23.ps

我想去掉最后的随机文件扩展名,只剩下
name_1.23.ps

与此类似的其他问题使用“.”作为分隔符,但这会删除 name_1 之后的所有内容。

我想在命令行上执行此操作(在 tcsh 或 bash 中)

最佳答案

检查它是否适合您的要求:

sed

sed 's/\.[^.]*$//'

grep
grep -Po '.*(?=\.)'

测试:
kent$  cat f
name_1.23.ps.png
name_1.23.ps.best
name_1.23.ps
name_1.23.ps

#sed:
kent$  sed 's/\.[^.]*$//' f
name_1.23.ps
name_1.23.ps
name_1.23
name_1.23

#grep
kent$  grep -Po '.*(?=\.)' f
name_1.23.ps
name_1.23.ps
name_1.23
name_1.23

编辑 从评论。我觉得这将是新的要求:

grep
kent$  grep -o '.*\.ps' f                                                                                         
name_1.23.ps
name_1.23.ps
name_1.23.ps
name_1.23.ps

sed
kent$  sed 's/\(.*\.ps\)\..*/\1/' f
name_1.23.ps
name_1.23.ps
name_1.23.ps
name_1.23.ps

关于bash - 仅从文件名中删除最后一个扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18251070/

相关文章:

linux - 使用 [! -d "$DIR"]

bash - 将文本插入特定行

C-从文件中读取

Git 工作流 : commit ! = 操作系统保存

user-interface - BlackBerry - 滚动固定大小文本编辑,左侧和边框带有静态标签

linux - 根据条件在 Linux 中创建新文件

ruby - 为什么我不能从 Ruby 中调用 `history`?

python - 无法在 python 中打开图像文件

java - 多线程写入文本文件

intellij-idea - IntelliJ Multiline 在每行末尾进行编辑?