Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash-提取变量中以数字开头的部分_Bash - Fatal编程技术网

bash-提取变量中以数字开头的部分

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-

我在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-9]{6})_.*~\1~' <<< "$var1")
echo "$var2"
正则表达式详细信息:

  • */
    :匹配任何东西(贪婪),直到我们匹配
    /
  • ([0-9]{6})
    :匹配6位数字并将其捕获到组#1中
  • .*
    :匹配
    .
    和所有内容,直到结束

替换为
\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