(Bash)Regex变量在另一个正则表达式中

时间:2013-07-15 12:09:07

标签: regex bash variables

我正在编写一个脚本,该脚本使用正则表达式进行grepping,并包含另一个带变量的正则表达式。但它似乎存在问题。

脚本($ hostname是来自命令行的参数,可以是google.com):

tldlist="$(curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | grep -v '#' | tr '\n' '|' | sed 's/|$//g')"

curl="$(curl -vfIk https://$hostname 2>&1 | sed 's/^\* \t //g' | grep -i -o --color=never -E \"CN=\(.*\)\.\($tldlist\)\")"
expiration="`curl -vfIk https://$hostname 2>&1 | sed 's/^\* \t //g' | grep -i -E --color=never '(start|expire)'`"

echo "$curl"
echo "$expiration"

它与curl输出中具有公用名的部分不匹配。 如果我手动编写正则表达式,它可以正常工作并匹配。

所以问题是:如何在bash中解决这个正则表达式问题?

更新
现在我尝试用另一种方式编写它,它的工作原理(基本上):

curl=$(curl -vfIk https://$hostname 2>&1 | sed 's/^\* \t //g' | grep -i -o --color=never -E "CN=(.*)\.($tldlist)")

问题在于转义引号和括号。但由于多行变量,我必须将命令的输出放入双引号中(不是上面的行,这只是给你一行)。

但仍然:
如何解决转义/正则表达式/变量问题存在问题。

1 个答案:

答案 0 :(得分:0)

直接问题不是正则表达式问题。您的$tldlist变量在单引号内,单引号可防止变量扩展。将第二行更改为,例如:

curl="$(curl -vfIk https://$hostname 2>&1 | sed 's/^\* \t //g' | tr '[A-Z]' '[a-z]' | grep -i --color=never -E "CN=\(.*\)\.$tldlist")"

以便$tldlist展开。