删除除文件扩展名之外的所有内容[重复]
Posted
技术标签:
【中文标题】删除除文件扩展名之外的所有内容[重复]【英文标题】:Removing everything but filename extension [duplicate] 【发布时间】:2015-07-22 05:06:07 【问题描述】:假设我有一个字符串:
x=file.tar.sh
我知道如何删除除最后 n 个字符之外的所有内容。像这样(删除除最后 3 个字符之外的所有内容:
$x: -3
但这不适用于具有不同后缀长度的文件。 (len .tar != len .sh)
我会通过删除直到最后一个点的所有内容来解决这个问题。我试过这个:
$x##.
这会删除最长的匹配,直到 "."但不知何故,它只是返回完整的字符串而不删除任何内容?
【问题讨论】:
你的分配错误应该是这个x=file.tar.sh
您似乎误解了$x##.
应该做什么。这只会删除一个前导句点,并且与$x#.
相同,因为给定的模式仅匹配单个文字字符串。
【参考方案1】:
试试这个:
x=file.tar.sh
echo $x##*.
这将打印sh
如果你想得到tar.sh
,那么:
echo $x#*.
这里*
匹配.
出现之前的任何字符集
【讨论】:
谢谢,这行得通,但我不明白需要“*”。使用特殊字符时一定要使用吗? Jahid 没有解释的是,他使用参数扩展/子字符串提取来解析行以删除路径中不需要的部分。##
从左边开始,然后匹配 所有出现的模式 *.
(表示匹配所有内容直到最后一个 .
)。 *
是任何字符出现零次或多次的通配符。单个#
匹配第一次出现的模式。
好吧,我唯一真正没有得到的是通配符部分。感谢您为我解决这个问题,我很感激。
@mythic linfo.org/wildcard.html以上是关于删除除文件扩展名之外的所有内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess 重定向除 css 和 javascript 之外的所有扩展