当给出一个字符串时,我想搜索一个匹配两个字符的子字符串(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
显然上面的命令不起作用。
答案 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
这是bash的正则表达式。