我从正则表达式中得到一个空白的回声

I get a blank echo from regex

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

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'。点必须转义以匹配文字点,/ 在这里并不特殊,不需要转义。

参见online demo