我的文件名看起来与此类似
name_1.23.ps.png
或
name_1.23.ps.best
或
name_1.23.ps
我想在最后删除随机文件扩展名,只留下
name_1.23.ps
与此类似的其他问题'。'作为一个熟食店,但这会删除name_1后的所有内容。
我想在命令行上执行此操作(在tcsh或bash中)
答案 0 :(得分:3)
检查这是否符合您的要求:
<强> 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
答案 1 :(得分:2)
我们可以使用bash字符串操作从字符串后面删除glob patten的最短匹配。我们将使用&#34;。*&#34;对于glob模式。
filename="name_1.23.ps.png"
echo ${filename%.*}
# the above output name_1.23.ps
这个答案更适合我自己的参考,因为我几次回到这个页面。 (如果仅以&#39; .ps&#39;)结束,它不满足OP的原始字符串相同的附加要求。
答案 2 :(得分:-1)
试试这个:
string="name_1.23.ps.png"
array=(${string//./ })
echo "${array[0]}.${array[1]}.${array[2]}"