文字列 (複数文字) 区切り文字で文字列を分割して配列にするにはどうすればよいですか?

文字列 (複数文字) 区切り文字で文字列を分割して配列にするにはどうすればよいですか?

基本的に、たとえば文字列セパレータを使用して文字列を配列に分割したいと思いますsep.。、などのツールを使用せずにこれを行うネイティブな方法はありますか?bashを設定して使用することで文字列を配列に分割できることは知っていますが、文字列セパレータでは機能しません。それがない場合は、、などのツールを使用してどのように実行しますか?sedawkIFSread -rasedawk

文字列があり、それをとThis is some sep.stringの 2 つの要素を持つ配列に分割するとします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、各行を独自の要素に持つ配列を作成します。

関連情報