检查字符串是否按顺序包含嵌入字符串

时间:2016-04-09 16:33:54

标签: regex string bash

我想检查一些字符串是否嵌入另一个字符串中。例如,pineappleapple匹配以及aepprestlseapple

如果我知道我要测试的单词,这是一个简单的任务:

if [[ $e == *"a"*"p"*"p"*"l"*"e"* ]]
then
   echo "match"
fi

但是,当我运行脚本时,我不知道将替换"apple"变量的长度或内容。如何使用可变大小/内容执行此检查?

2 个答案:

答案 0 :(得分:1)

awk救援!

$ awk -v s='pineapple' -v r='apple' '
     BEGIN{for(i=1;i<=length(r);i++) 
             {s=substr(s,k); 
              k=index(s,substr(r,i,1)); 
              if(k==0) exit 1} 
           exit 0}'; echo $? 

答案 1 :(得分:1)

以下是如何生成匹配的glob模式:

data='bcdaeppr?estlse'
search='app?le'

# generate a regex using sed i.e. *\a*\p*\p*\?\l*\e*
patt="*$(sed 's/./\\&*/g' <<< "$search")"

# now match it
[[ $data == $patt ]] && echo "matched" || echo "nope"
matched

# not matching example
data='bcdaepprestlse'
[[ $data == $patt ]] && echo "matched" || echo "nope"
nope