使用带正则表达式的 Sed 将结果保存到变量中

Using Sed with regular expression to save results into a variable

我想做的是将用户输入作为字符串并解析字符串的一部分。我想将正则表达式的结果保存到一个新变量中。这是我到目前为止所拥有的。

#!/bin/bash
downloadUrl=""
pythonFile=echo $downloadUrl | sed '/Python-[\d+.]+tgz/'
echo "$downloadUrl"
echo "$pythonFile"

这是我的结果。

sed: 1: "/Python-[\d+.]+tgz/": command expected

您忘记了 运行 $() 中的命令来获取命令替换。使用:

pythonFile=$(echo $downloadUrl | sed '/Python-[\d+.]+tgz/')

有关详细信息,请参阅 the manual

sed '/Python-[\d+.]+tgz/' 是不正确的,因为您需要像 p 这样的 sed 命令,而且无论如何它只是搜索而不是真正提取输入文本的一部分。

您可以使用grep -oP

pythonFile$(grep -oP '/Python-[\d+.]+tgz/' <<< "$downloadUrl")

或没有-P

pythonFile$(grep -o '/Python-[0-9+.]\+tgz/' <<< "$downloadUrl")