bash-提取变量中以数字开头的部分
我在bash脚本中有以下变量“VAR1”:bash-提取变量中以数字开头的部分,bash,Bash,我在bash脚本中有以下变量“VAR1”: VAR1 = "/path/to/file/190909_AAA_ZZZ/" 现在我想创建一个只包含“190909”部分的变量(VAR2) 我想通过提取从任意6位数字(190909)开始直到下一个“\u909”的部分来实现这一点 如何做到这一点 VAR2 = ${grep ... $VAR1} ??? 您可以使用此sed命令: var1="/path/to/file/190909_AAA_ZZZ/" var2=$(sed -E 's~.*/([0-
VAR1 = "/path/to/file/190909_AAA_ZZZ/"
现在我想创建一个只包含“190909”部分的变量(VAR2)
我想通过提取从任意6位数字(190909)开始直到下一个“\u909”的部分来实现这一点
如何做到这一点
VAR2 = ${grep ... $VAR1} ???
您可以使用此
sed
命令:
var1="/path/to/file/190909_AAA_ZZZ/"
var2=$(sed -E 's~.*/([0-9]{6})_.*~\1~' <<< "$var1")
echo "$var2"
正则表达式详细信息:
:匹配任何东西(贪婪),直到我们匹配*/
/
:匹配6位数字并将其捕获到组#1中([0-9]{6})
:匹配.*
和所有内容,直到结束.
替换为
\1
,用于将捕获的组#1值放回。请尝试以下操作:
VAR1="/path/to/file/190909_AAA_ZZZ/"
[[ $VAR1 =~ ([0-9]{6})_ ]] && VAR2=${BASH_REMATCH[1]}
echo "$VAR2"
输出:
190909
请注意,不建议对普通变量名使用大写字母。pcre grep和perl等价物:
$ VAR1="/path/to/file/190909_AAA_ZZZ/"
$ grep -oP '[0-9]{6}(?=_)' <<< $VAR1
190909
$ perl -nE 'say for /([0-9]{6}(?=_))/' <<< $VAR1
190909
$VAR1=“/path/to/file/190909_AAA_ZZZ/”
$grep-oP'[0-9]{6}(?=_)'
$ VAR1="/path/to/file/190909_AAA_ZZZ/"
$ grep -oP '[0-9]{6}(?=_)' <<< $VAR1
190909
$ perl -nE 'say for /([0-9]{6}(?=_))/' <<< $VAR1
190909