arraysstringbash

Split string into array using multi-character delimiter


I need to split a string into an array. My problem is that the delimiter is a 3 character one: _-_

For example:

db2-111_-_oracle12cR1RAC_-_mariadb101

I need to create the following array:

db2-111
oracle12cR1RAC
mariadb101

Similar questions followed this approach:

str="db2-111_-_oracle12cR1RAC_-_mariadb101"
arr=(${str//_-_/ })
echo ${arr[@]}

Even if the array is created, it has been split incorrectly:

db2 
111 
oracle12cR1RAC 
mariadb101

It seems that the "-" character in the first item causes the array's split function to fail.

Can you suggest a fix for it? Thanks.


Solution

  • If you can, replace the _-_ sequences with another single character that you can use for field splitting. For example,

    $ str="db2-111_-_oracle12cR1RAC_-_mariadb101"
    $ str2=${str//_-_/#}
    $ IFS="#" read -ra arr <<< "$str2"
    $ printf '%s\n' "${arr[@]}"
    db2-111
    oracle12cR1RAC
    mariadb101