我的文件名看起来与此类似
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/