从 bash 脚本中的字符串中提取模式

Gab*_*aul 4 linux string bash shell

对 bash 有点新。

我尝试过参数扩展、grep、sed 和 echo 来解决这个问题,但无法完全解决。

我正在尝试从 bash 脚本中的 $PWD 中提取特定模式。

假设可能有多种完整路径:

/home/files/tmp8
/home/tmp28/essential
/home/tmp2/essential/log
/home/files/tmp10/executables
/tmp8/files/whatever/etc
Run Code Online (Sandbox Code Playgroud)

在每个实例中,我都想提取包含“tmp”后跟 1 个或多个整数的任何字符串。

因此,在处理 $PWD 的每个实例中,它将返回“tmp8”、“tmp28”、“tmp2”等。

对于功能/操作符如何解决此问题的解释也将不胜感激。

loj*_*joe 6

您可以在 bash 中使用正则表达式从任何路径字符串中提取模式。请参见以下示例:

if [[ "$PWD" =~ ^.*(tmp[0-9]+).*$ ]]
then
    printf "match: ${BASH_REMATCH[1]}\n"
else
    printf "no match: $PWD\n"
fi
Run Code Online (Sandbox Code Playgroud)

正则表达式在圆括号中定义一个组。如果表达式与匹配组匹配(tmp 后面至少有一位数字),Bash 会将其存储在数组 BASH_REMATCH 中。