我想检查一些字符串是否嵌入另一个字符串中。例如,pineapple
和apple
匹配以及aepprestlse
和apple
。
如果我知道我要测试的单词,这是一个简单的任务:
if [[ $e == *"a"*"p"*"p"*"l"*"e"* ]]
then
echo "match"
fi
但是,当我运行脚本时,我不知道将替换"apple"
变量的长度或内容。如何使用可变大小/内容执行此检查?
答案 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