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