这个正则表达式的变量赋值有什么问题

时间:2019-04-22 05:26:08

标签: regex bash sh

简单的正则表达式,用于检查输入的字符串是否作为IP地址匹配的条件。如果将正则表达式直接与参数进行比较,则可以正常工作,但是如果我对正则表达式使用了变量赋值,则无法正常工作。

我已经使用一些不同的语法进行了测试,但除非直接使用正则表达式,否则仍然无法正常工作。

#!/bin/bash

#provide one word/sentence as an argument to the script. If in that sentence will be ip address,
#find out, if that ip address is reachable or not.

#argument check

if [ $# -ne 1 ]; then
   echo "Provide exactly one argument e.g. $0 argument"
   exit 1
fi

var1=$1
#ip address regex 127.0.0.1
regexp="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1-3}\.[0-9]{1,3}"


#regex check
#if ! [[ $var1 =~ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]; then
if ! [[ $var1 =~ $regexp ]]; then
   echo "No IP address provided"
   exit 2
fi

IP=${BASH_REMATCH[0]}

#find if ip address is reachable or not
ping -c4 $IP
if [ $? -eq 0 ]; then
   status="Alive"
else
   status="Dead"
fi

echo "IP found: $IP ($status)"

具有:

 if ! [[ $var1 =~ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]; then

工作正常,但不能:

 regexp="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1-3}\.[0-9]{1,3}"
 if ! [[ $var1 =~ $regexp ]]; then

我研究了许多文章,但找不到确切的答案。

1 个答案:

答案 0 :(得分:1)

table_data = ['andrew', 'smith', 'bob', 'richardson', 'joe', 'jonas', 'matt', 'davis']
#Output
#{'name': ['andrew', 'bob', 'joe', 'matt'], 
#'surname': ['smith', 'richardson', 'jonas', 'davis']}

应该是

[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1-3}\.[0-9]{1,3}
#                              ^