如何使用 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.*$')"