如何使用 grep 从 WHOIS 记录回显数据(将标准输出重定向到变量)
How to echoing data from WHOIS records with grep (redirecting standard output into a variable)
我有这个 bash 脚本:
如何在 if else 语句中将其称为 grep
的输出?如果我用 -q
抑制 grep
命令的输出,也会起作用吗?
#!/usr/bin/env bash
DOMAINS=( '.com' '.biz' )
while read input; do
for (( i=0;i<${#DOMAINS[@]};i++)); do
jwhois --force-lookup --disable-cache --no-redirect -c jwhois.conf "$input${DOMAINS[$i]}" | MATCH="$(grep -oPa '^.*\b(clientTransferProhibited)\b.*$')"
if [ $? -eq 0 ]; then
echo -e "$input${DOMAINS[$i]}\tregistered\t" $(date +%y/%m/%d_%H:%M:%S) "\t" "$MATCH" |& tee --append output/registered.txt
else
echo -e "$input${DOMAINS[$i]}\tavailable\t" $(date +%y/%m/%d_%H:%M:%S) "\t" "$MATCH" |& tee --append output/available.txt
fi
done
done < ""
所以 "$MATCH"
在 if else 语句中使用的 MATCH="$(grep -oPa '^.*\b(clientTransferProhibited)
没有输出任何东西,但如果我只使用 grep -oPa '^.*\b(clientTransferProhibited)
,它打印该行没有问题。之所以要作为变量使用,是因为我想在if else语句中放在特定的地方。
实际输出:
$ domain1.com available 15/11/16_14:13:05
$ domain1.biz available 15/11/16_14:13:05
$ domain2.com registered 15/11/16_14:13:05
$ domain2.biz registered 15/11/16_14:13:05
我想要的输出:
$ domain1.com available 15/11/16_14:13:05
$ domain1.biz available 15/11/16_14:13:05
$ domain2.com registered 15/11/16_14:13:05 Status: clientTransferProhibited http://www.icann.org/epp#clientTransferProhibited
$ domain2.biz registered 15/11/16_14:13:05 Status: clientTransferProhibited http://www.icann.org/epp#clientTransferProhibited
因此这一行的结果就是您想要存储在变量中的内容...
jwhois --force-lookup --disable-cache --no-redirect -c jwhois.conf "$input${DOMAINS[$i]}" | grep -oPa '^.*\b(clientTransferProhibited)\b.*$'
在这种情况下,您需要评估该行并将整个内容设置为您想要的变量。您在管道中间尝试的分配类型将无效。
MATCH=$(jwhois --force-lookup --disable-cache --no-redirect -c jwhois.conf "$input${DOMAINS[$i]}" | grep -oPa '^.*\b(clientTransferProhibited)\b.*$')
这是两个不同的 MATCH 变量,因为管道执行子 shell:
Bash subshell/pipelines - which parts are executing in subshells?
试试这个方法:
MATCH="$(jwhois --force-lookup --disable-cache --no-redirect -c jwhois.conf "$input${DOMAINS[$i]}" | grep -oPa '^.*\b(clientTransferProhibited)\b.*$')"
我有这个 bash 脚本:
如何在 if else 语句中将其称为 grep
的输出?如果我用 -q
抑制 grep
命令的输出,也会起作用吗?
#!/usr/bin/env bash
DOMAINS=( '.com' '.biz' )
while read input; do
for (( i=0;i<${#DOMAINS[@]};i++)); do
jwhois --force-lookup --disable-cache --no-redirect -c jwhois.conf "$input${DOMAINS[$i]}" | MATCH="$(grep -oPa '^.*\b(clientTransferProhibited)\b.*$')"
if [ $? -eq 0 ]; then
echo -e "$input${DOMAINS[$i]}\tregistered\t" $(date +%y/%m/%d_%H:%M:%S) "\t" "$MATCH" |& tee --append output/registered.txt
else
echo -e "$input${DOMAINS[$i]}\tavailable\t" $(date +%y/%m/%d_%H:%M:%S) "\t" "$MATCH" |& tee --append output/available.txt
fi
done
done < ""
所以 "$MATCH"
在 if else 语句中使用的 MATCH="$(grep -oPa '^.*\b(clientTransferProhibited)
没有输出任何东西,但如果我只使用 grep -oPa '^.*\b(clientTransferProhibited)
,它打印该行没有问题。之所以要作为变量使用,是因为我想在if else语句中放在特定的地方。
实际输出:
$ domain1.com available 15/11/16_14:13:05
$ domain1.biz available 15/11/16_14:13:05
$ domain2.com registered 15/11/16_14:13:05
$ domain2.biz registered 15/11/16_14:13:05
我想要的输出:
$ domain1.com available 15/11/16_14:13:05
$ domain1.biz available 15/11/16_14:13:05
$ domain2.com registered 15/11/16_14:13:05 Status: clientTransferProhibited http://www.icann.org/epp#clientTransferProhibited
$ domain2.biz registered 15/11/16_14:13:05 Status: clientTransferProhibited http://www.icann.org/epp#clientTransferProhibited
因此这一行的结果就是您想要存储在变量中的内容...
jwhois --force-lookup --disable-cache --no-redirect -c jwhois.conf "$input${DOMAINS[$i]}" | grep -oPa '^.*\b(clientTransferProhibited)\b.*$'
在这种情况下,您需要评估该行并将整个内容设置为您想要的变量。您在管道中间尝试的分配类型将无效。
MATCH=$(jwhois --force-lookup --disable-cache --no-redirect -c jwhois.conf "$input${DOMAINS[$i]}" | grep -oPa '^.*\b(clientTransferProhibited)\b.*$')
这是两个不同的 MATCH 变量,因为管道执行子 shell:
Bash subshell/pipelines - which parts are executing in subshells?
试试这个方法:
MATCH="$(jwhois --force-lookup --disable-cache --no-redirect -c jwhois.conf "$input${DOMAINS[$i]}" | grep -oPa '^.*\b(clientTransferProhibited)\b.*$')"