長い文字列があり、最初に表示される部分文字列を探したいのですが、部分文字列に二重引用符が含まれています。私が知っている唯一の方法は次のとおりです。
mystr='a very, very, extremely, incredibly long string of text that contains the phrase he said, "Hello!" somewhere in the middle'
strpos=`expr index "$mystr" Hello`
echo $strpos
92を返します。ただし、部分文字列に二重引用符が含まれている場合は機能しません。
strpos=`expr index "$mystr" he said, "Hello`
二重引用符(およびスペース)をエスケープしてみました。文字列を一重引用符で囲んで見つけようとしました。 「予期しないEOF」や「構文エラー」を受信せずに実行すると、「2」のような途方もない結果が返されます。 (このポジションは何千ものありexpr index
ます)できる私はしますか?
ベストアンサー1
私の考えでは、最初の文字列から2番目の文字列の文字を検索していると思います。グレブを使用できます
mystr='a very, very, extremely, incredibly long string of text that contains 2 the phrase he said, "Hello!" somewhere in the middle'
echo "$mystr"| grep -o -b Hello!
それは戻ってきます91:Hello!
。ここで、インデックスは0から始まります。
同じ状況が複数回発生した場合、出力は次のようになります。
0:a 58:a 65:a 77:a 85:a
二重引用符も検索するにはエスケープしてください。
echo "$mystr"| grep -o -b \"Hello!\"
出力は次のとおりです
90:"Hello!"