0

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

脚本($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)")

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

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

4

1 回答 1

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扩展。

于 2013-07-15T12:19:05.837 回答