Regex 我从正则表达式中得到一个空白回音

Regex 我从正则表达式中得到一个空白回音,regex,string,bash,echo,Regex,String,Bash,Echo,如果我运行此文件,它工作正常并输出我期望的行: workspaceFile=`cat tensorflow/workspace.bzl` echo $workspaceFile | grep -oP '\/[a-z0-9]{12}.tar.gz' 但是,如果我运行此操作,我得到的只是终端中的空白输出: workspaceFile=`cat tensorflow/workspace.bzl` TAR_FILE_WITH_SLASH=$workspaceFile | grep -oP '\/[a-

如果我运行此文件,它工作正常并输出我期望的行:

workspaceFile=`cat tensorflow/workspace.bzl`
echo $workspaceFile | grep -oP '\/[a-z0-9]{12}.tar.gz'
但是,如果我运行此操作,我得到的只是终端中的空白输出:

workspaceFile=`cat tensorflow/workspace.bzl`
TAR_FILE_WITH_SLASH=$workspaceFile | grep -oP '\/[a-z0-9]{12}.tar.gz'
echo $TAR_FILE_WITH_SLASH
该文件相当长,因此为了简单起见,我将在此处添加一个缩短版本:

tf_http_archive(
  name = "eigen_archive",
  urls = [
    "https://mirror.bazel.build/bitbucket.org/eigen/eigen/get/6913f0cf7d06.tar.gz",
    "https://bitbucket.org/eigen/eigen/get/6913f0cf7d06.tar.gz",
  ],
这条路怎么走

workspaceFile=`cat ~/tensorflow/workspace.bzl`
您需要使用
$()
语法,回显
workspaceFile
的内容,然后通过管道执行
grep
命令:

TAR_FILE_WITH_SLASH="$(echo $workspaceFile | grep -oE '/[a-z0-9]{12}\.tar\.gz')"
另外,请注意,此处不需要PCRE正则表达式,您可以使用POSIX ERE正则表达式(即,将
p
替换为
E
)。您甚至可以在这里使用POSIX BRE模式,如
grep-o'/[a-z0-9]\{12\}\.tar\.gz'
。点必须转义以匹配文字点,
/
在这里不特殊,不需要转义


请参阅。

使用
TAR_FILE_WITH_SLASH=“$(echo$workspaceFile | grep-oP'/[a-z0-9]{12}\.TAR\.gz')”
我知道这是一个额外的问题,但最终的所需输出将仅为1,删除了前导“/”?您的意思是要删除
/
?使用
grep-oP'/\K[a-z0-9]{12}\.tar\.gz'
Yes完全正确,并且只匹配正则表达式的第一次出现(在这个特定示例中有2个)。好的,使用。非常感谢!我想知道你的正则表达式:)