Como as strings nos colchetes são sempre prefixadas por uma aspa simples, você pode simplesmente substituir o par assim:
$ sed "s/',/';/g" file
12.com,128.15.8.6,TEXT1,no1,['128.15.8.6']
23com,122.14.10.7,TEXT2,no2,['122.14.10.7']
45.com,91.33.10.4,TEXT3,no3,['91.33.10.4']
67.com,88.22.88.8,TEXT4,no4,['88.22.88.8'; '5.112.1.10']
67.com,88.22.88.8,TEXT4,no4,['88.22.88.8'; '5.112.1.10'; '1.2.3.4']
67.com,88.22.88.8,TEXT4,no4,['88.22.88.8'; '5.112.1.10'; '1.2.3.4'; '2.3.4.5']
Alternativa que lida com 3 ou menos
Para substrings dentro dos colchetes de até 3 de comprimento ( ['xxx', 'yyy', 'zzz'] ). Você pode usar sed para fazer isso:
$ sed 's/\([^\[]*\)\([^,]*\),\([^,]*\)/;/g' file
12.com,128.15.8.6,TEXT1,no1;['128.15.8.6']
23com,122.14.10.7,TEXT2,no2;['122.14.10.7']
45.com,91.33.10.4,TEXT3,no3;['91.33.10.4']
67.com,88.22.88.8,TEXT4,no4,['88.22.88.8'; '5.112.1.10']
67.com,88.22.88.8,TEXT4,no4,['88.22.88.8'; '5.112.1.10'; '1.2.3.4']
Como funciona
Dentro dessa solução, há uma pesquisa simples & substitua s/.../.../g
-
s/\([^\[]*\) - corresponde tudo ao [ (zero ou mais) e o salva em
-
\([^,]*\) - corresponde tudo ao , e o salva em
-
, - corresponde a uma vírgula
-
\([^,]*\) - corresponde a tudo que não é uma vírgula e salva em
-
/;/g - reconstrói os bits de forma que é ; agora, avidamente