String 子字符串搜索bash脚本

String 子字符串搜索bash脚本,string,bash,match,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 p

当给定一个字符串时,我想搜索一个子字符串,该子字符串匹配两个字符(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
显然,上述命令不起作用

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

if [[ $string =~ [[:space:]].?9.{2}0[[:space:]] ]]; then
    echo "found"
fi
或者更好地利用分词:


这是带有的正则表达式。

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

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

此解决方案在字符串“X9xx0 9xx0x”上不起作用。它再次返回9xx0x而不是X9xx0copy/paste,并进行相应的后期编辑。我假设前导空格和9个数字之间只有一个字符或没有字符,第二个解决方案需要一个$-锚。我使用的是类似于第二个解决方案的for循环。。该正则表达式在“x9xx0 9xx0x”上不起作用。它为$string中的s选择了9xx0x而不是想要的x9xx0s;如果[[$s==*9±0]],则执行该操作;然后echo$s;fi done工作正常:)很抱歉,我没有在原始问题中添加for循环。实际上有一个。我的问题是关于搜索模式。当我将我的模式*9**0更改为*9??0时,如果条件正常:)。谢谢
( set -- $string
  for elt; do [[ $elt == *9??0 ]] && { echo "found"; exit; }; done )