我从正则表达式中得到一个空白的回声
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。
如果我 运行 这个文件,它工作正常并输出我期望的行:
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。