BASH_REMATCH 有 / 字符
BASH_REMATCH with / character
您好,我有一个这样的文本文件:
# 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)
return 仅
home.html
而不是
mysite.ch/home.html
如何解决?
更改此行:
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
您好,我有一个这样的文本文件:
# 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)
return 仅
home.html
而不是
mysite.ch/home.html
如何解决?
更改此行:
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