2016-04-09 27 views
3

文字列が別の文字列に埋め込まれているかどうかをチェックします。例えば、pineappleappleが一致し、aepprestlseappleと一致します。文字列に埋め込まれた文字列が含まれているかどうかを確認してください。

私は、たとえばに対してテストしたい単語を知っている場合、これは簡単な作業です:私は、スクリプトを実行したときに、私の"apple"変数を置換するものの長さや内容を知らないしかし

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

を。可変サイズ/内容でこのチェックを実行するにはどうすればよいですか?

答えて

1

は、あなたがマッチするグロブパターンを生成する方法である。

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 
+1

は、私が前に倍に働いていないが、これは私が始まったように私がダウン易しく書き直さアプローチを使用して終了、ありがとうございました –

+1

'sed 'で//&.*/g;と同じ正規表現を作成することができます。///.\*$//'<< apple' – karakfa

+1

検索文字列に制限された文字列が含まれていても、状況によっては検索文字列の空白文字は無視されます。 Globbingは検索文字列の文字に対して行われるので、検索文字列に '*'が含まれていると奇妙なことが起こります。検索文字列に '.'、' ['、'] 'のような正規表現のメタ文字が含まれていると、奇妙なことも起こります。 – pjh

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 $? 
関連する問題