【发布时间】:2013-09-04 02:20:14
【问题描述】:
我正在尝试提取 bash 脚本中文件扩展名之前的最后一个数字。所以格式会有所不同,但它会是数字和字母的某种组合,最后一个字符将始终是数字。我需要提取这些数字并将它们存储在一个变量中。
格式一般为:
sdflkej10_sdlkei450_sdlekr_1.txt
我只想将最后一个数字 1 存储到变量中。
我将使用它来遍历大量文件,最后一个数字将变为两位数和三位数。
所以对于这个文件:
kej10_sdlkei450_sdlekr_310.txt
我需要返回 310。
字母数字字符和下划线的数量因每个文件而异,但我想要的数字始终位于 .txt 扩展名之前和下划线之后。
我试过了:
bname=${f%%.*}
number=$(echo $bname | tr -cd '[[:digit:]]')
但这会返回所有数字。
如果我尝试
number = $(echo $(bname -2) it changes the number it returns.
我遇到的问题主要与可变性有关,以及我被要求在 bash 中执行此操作的事实。任何帮助将不胜感激。
【问题讨论】:
-
当你说你必须“在 bash 中做”时,这是否意味着你不能使用命令行版本的实用程序,如 perl 或 sed?
-
我可以使用 sed,但不能使用 perl。我基本上不允许使用项目中每个人都可以使用的东西。 sed、awk、bash 都差不多。