文字列(複数文字)区切り文字を使用して文字列を配列に分割するには?

文字列(複数文字)区切り文字を使用して文字列を配列に分割するには?

基本的に、文字列を文字列区切り記号(たとえばsep.、.bashなどのツールを使用せずにこれを実行するための基本的な方法はありますか?それはうまくいきません。sedawkIFSread -rasedawk

文字列があり、それをThis is some sep.string2つの要素を持つ配列に分割したいとします。This is somestring

答え1

パラメータ拡張を使用して手動で変数を繰り返すことができます。

#!/bin/bash
var='This is some sep.string
with
newlines
sep.another line'

a=()
while [[ $var =~ sep\. ]]
do
  e=${var%%sep.*}
  a+=("${e}")
  var=${var#${e}sep.}
done
a+=("${var}")

これは変数を繰り返し(プロセスで更新)、最初の区切り文字を前方に削除します(%%最も長い一致が見つかるため、文字列の最後から最初のインスタンスまで逆方向に追跡されますsep.)。残りは次に追加されます。配列の残りの部分と区切り文字は変数の前の部分から削除されます。変数に区切り文字がなくなるまで繰り返し、残りを配列に追加します。

答え2

パラメータ拡張とreadarrayを使用してこれを行う基本的な方法に似ています。

string='This is some sep.string'
mapfile -t array < <( echo "${string//sep./$'\n'}" )

${string//sep./$'\n'}sep.- 発生を改行文字に置き換えます。mapfile/はreadarray各行に独自の要素を持つ配列を作成します。

関連情報