linux 带/字符的BASH_REMATCH

ix0qys7i  于 2022-11-02  发布在  Linux
关注(0)|答案(1)|浏览(112)

你好,我有一个这样的文本文件:


# mysite.online (host ok)

192.168.0.10,0
192.168.1.3,0

# mysite.ch (host ok)

192.168.0.11
192.168.1.4

# mysite2.online (host ok)

192.168.0.12
192.168.1.9

# mysite2.ch (host ok)

192.168.0.13
192.168.1.11

# mysite.ch/home.html (url ok)

192.168.0.15
192.168.1.169

我需要读取单行并捕获主机名和IP:我使用的代码是:

while read -r line
  do
    if [[ $line =~ ([a-zA-Z0-9.-]+)\ \((host|url)\ ok\) ||
      $line =~ ([0-9]+(\.[0-9]+){3})\ \(IP\ ok\) ]]; then
      host="${BASH_REMATCH[1]}"
    elif [[ $host != "" ]]; then
      if [[ $line =~ ^([0-9]+(\.[0-9]+){3}) ]]; then
        ip="${BASH_REMATCH[1]}"
        check_site $host $ip
      fi
    fi
  done < <(echo -e "$chunk") &

但我有一个问题,捕捉主机时,有一个/字符,例如主机
# mysite.ch/home.html (url ok)只会传回home.html,而不会传回mysite.ch/home.html
怎么能修好呢?

nhaq1z21

nhaq1z211#

更改此行:

if [[ $line =~ ([a-zA-Z0-9.-]+)\ \((host|url)\ ok\) ||
          $line =~ ([0-9]+(\.[0-9]+){3})\ \(IP\ ok\) ]]; then

更改为:

if [[ $line =~ ([a-zA-Z0-9./-]+)\ \((host|url)\ ok\) ||
          $line =~ ([0-9]+(\.[0-9]+){3})\ \(IP\ ok\) ]]; then

相关问题