use*_*508 1 bash file edit tcsh
我的文件名看起来与此类似
name_1.23.ps.png
Run Code Online (Sandbox Code Playgroud)
要么
name_1.23.ps.best
Run Code Online (Sandbox Code Playgroud)
要么
name_1.23.ps
Run Code Online (Sandbox Code Playgroud)
我想最后摘下随机文件扩展名,只剩下
name_1.23.ps
Run Code Online (Sandbox Code Playgroud)
与此类似的其他问题使用'。'。作为Delimator,但这会删除name_1之后的所有内容。
我想在命令行(在tcsh或bash中)执行此操作
检查是否符合您的要求:
sed
sed 's/\.[^.]*$//'
Run Code Online (Sandbox Code Playgroud)
grep
grep -Po '.*(?=\.)'
Run Code Online (Sandbox Code Playgroud)
测试:
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
Run Code Online (Sandbox Code Playgroud)
从评论中编辑。我觉得这是新要求:
grep
kent$ grep -o '.*\.ps' f
name_1.23.ps
name_1.23.ps
name_1.23.ps
name_1.23.ps
Run Code Online (Sandbox Code Playgroud)
sed
kent$ sed 's/\(.*\.ps\)\..*/\1/' f
name_1.23.ps
name_1.23.ps
name_1.23.ps
name_1.23.ps
Run Code Online (Sandbox Code Playgroud)
小智 5
我们可以使用bash字符串操作,从字符串的后面删除最短匹配的glob模式。我们将使用“。*”作为glob模式。
filename="name_1.23.ps.png"
echo ${filename%.*}
# the above output name_1.23.ps
Run Code Online (Sandbox Code Playgroud)
我再次返回此页面时,此答案仅供我参考。(如果仅以'.ps'结尾,它不满足OP保持原始字符串相同的附加要求)。