基本的に、たとえば文字列セパレータを使用して文字列を配列に分割したいと思いますsep.
。、などのツールを使用せずにこれを行うネイティブな方法はありますか?bash
を設定して使用することで文字列を配列に分割できることは知っていますが、文字列セパレータでは機能しません。それがない場合は、、などのツールを使用してどのように実行しますか?sed
awk
IFS
read -ra
sed
awk
文字列があり、それをとThis is some sep.string
の 2 つの要素を持つ配列に分割するとしますThis is some
。string
答え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
、各行を独自の要素に持つ配列を作成します。