bash

时间:2017-01-02 17:18:03

标签: bash

我想匹配一个遵循这种模式的字符串:

  

应该以{{1​​}},AKN开头,然后可以跟W范围内的一个或多个数字,如果它有一个字母作为第二个字母,则数字跟随它,然后它可以有1,2或3个字母。

我试过了:

a-zA-Z

我遇到了问题,因为我的病例太多了(但还没有包括所有病例)。我怎样才能以更好的方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

所以我应该从Any A K N W开始,然后可以跟一个数字或字母a-z,如果它有一个字母作为第二个字母,则数字跟随它然后它可以有1-3个字母

有几种可能性来进行比赛。其中一个是使用正则表达式:

#!/bin/bash

shopt -s nocasematch

callsign() {
   while true; do
      read -ep "Insert your call sign: " input
      if [[ $input =~ [aknw](|[a-z])[0-9][a-z](|[a-z](|[a-z])) ]]; then
         break
      else
         echo "please insert valid call sign."
      fi
   done
   echo "it works!"
}
callsign

另一种可能性是使用扩展的glob:

#!/bin/bash

shopt -s nocasematch extglob

callsign() {
   while true; do
      read -ep "Insert your call sign: " input
      if [[ $input = [aknw]@(|[a-z])[0-9][a-z]@(|[a-z]@(|[a-z])) ]]; then
         break
      else
         echo "please insert valid call sign."
      fi
   done
   echo "it works!"
}
callsign

请注意nocasematch的使用,以便处理大写/小写。