我正在编写一个脚本,该脚本使用正则表达式进行 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)")
问题在于转义引号和括号。但是由于多行变量,我必须将命令的输出放在双引号中(不是上面的行,这只是给你一行)。
但仍然:
存在如何解决转义/正则表达式/变量问题的问题。