我在shell脚本的$FILE变量中存储了一个文件名,例如:
$FILE = application-231241223.tar
可以有不同的.tar文件名存储在那里。它们都有一个共同点,那就是在.tar之前有一个数字。
我需要将这个数字存储在$PROCESS_NUMBER变量中,而不考虑它的长度
文件名也可以是application-2412-test-12312333.tar或application-2412-test12312333.tar
我唯一需要存储的是.tar之前的数字,直到出现数字以外的字符。数字的长度也可以不同。
有人能给我建议怎么做吗
我试过了,没有用
export PROCESS_NUMBER=$(echo "$FILE" | sed 's/.*\([0-9]\+\)\.tar/\1')
export PROCESS_NUMBER=$(echo "$FILE" | sed 's/.*([0-9]+)\.tar/\1/g')
export PROCESS_NUMBER=$(echo "$FILE" | sed 's/[^0-9]*\([0-9]\+\).*/\1/')
export PROCESS_NUMBER=$(echo "$FILE" | sed 's/.*-\([0-9]\{1,\}\)\.tar/\1/')
3条答案
按热度按时间muk1a3rh1#
一个使用正则表达式和
BASH_REMATCH[]
数组的bash
想法:这产生:
我们要查找的值位于
BASH_REMATCH[1]
位置,因此OP的代码变为:使用参数扩展的替代方案:
这产生:
OP的代码变为:
hl0ma9xz2#
您可以使用bash的parameter substitution将所有非数字替换为空格,然后通过迭代其单词来检索最后一个数字块。范例:
41zrol4v3#
使用
awk
,因为它总是在.tar
中完成(因此是-4)