子字符串搜索bash脚本

时间:2013-03-18 21:27:29

标签: string bash match

当给出一个字符串时,我想搜索一个匹配两个字符的子字符串(9& 0。0应该是该子字符串中的最后一个字符),并且它们之间恰好有两个字符

string="asd20 92x0x 72x0 YX92s0 0xx0 92x0x"
#I want to select substring YX92s0 from that above string

for var in $string
do
if [[ "$var" == *9**0 ]]; then
    echo $var  // Should print YX92s0 only
fi
done

显然上面的命令不起作用。

2 个答案:

答案 0 :(得分:1)

您将每个元素与模式*9??0匹配。有几种方法可以做到这一点;这是一个使用字符串在子shell中设置位置参数,然后在for循环中迭代它们的那个:

( set -- $string
  for elt; do [[ $elt == *9??0 ]] && { echo "found"; exit; }; done )

答案 1 :(得分:0)

string="asd20 92x0x 72x0 X92s0 0xx0"

if [[ $string =~ [[:space:]].?9.{2}0[[:space:]] ]]; then
    echo "found"
fi

或者更好,利用分词

string="asd20 92x0x 72x0 X92s0 0xx0"

for s in $string; do
    if [[ $s =~ (.*9.{2}0) ]]; then
        echo "${BASH_REMATCH[1]} found"
    fi
done

这是的正则表达式。