我希望检查一个字符串是否嵌入在另一个字符串中。例如,pineapple
和 apple
匹配,以及 aepprestlse
和 apple
。
如果我知道要测试的单词,这是一个简单的任务,例如:
if [[ $e == *"a"*"p"*"p"*"l"*"e"* ]]
then
echo "match"
fi
然而,当我运行脚本时,我不知道将替换我的"apple"
变量的长度或内容是什么。如何在变量大小/内容不确定的情况下进行此检查?
awk
to the rescue!
$ 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 $?
以下是如何生成一个匹配的全局模式:
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
sed 's/./&.*/g;s/\.\*$//' <<< apple
创建相同的正则表达式。 - karakfa*
,则会发生奇怪的事情。如果搜索字符串包含正则表达式元字符如.
、[
和]
,也会出现奇怪的情况。 - pjh