获取文件名的一部分

时间:2015-12-27 13:22:19

标签: bash variables parameter-expansion

我尝试仅使用一个bash变量来获取文件num23.txt的编号。

User@User-MacBook-Pro:~$ f=num23.txt
User@User-MacBook-Pro:~$ echo $f
num23.txt
User@User-MacBook-Pro:~$ echo ${f%.txt}
num23
User@User-MacBook-Pro:~$ echo ${f/num}
23.txt
User@User-MacBook-Pro:~$ echo ${f/num%.txt}
num23.txt
User@User-MacBook-Pro:~$

我尝试仅使用%/运算符。如何才能将最后一个命令更改为仅作为输出23

1 个答案:

答案 0 :(得分:3)

获取号码

对于您的特定示例(当您只有一个只有数字的子字符串时):

echo ${f//[^0-9]/} 

echo ${f//[^[:digit:]]/}

获取前缀和后缀之间的字符串

但是如果要指定后缀和该字符串的前缀,则可以使用以下替代方法:

echo `basename ${f/num} .txt`

因为echo ${f/num%.txt}无法正常工作,Bash不允许您运行类似echo ${${f/num}%.txt}的内容。