Minha sugestão: Use Perl.
Em que perl-test é um arquivo contendo os dados no OP:
$ perl -pe 's/(?:(\s)192.*?(?:,|$))|(?:,192.*?(,|$))/$1$2/g' perl-test
+ : root : local,10.
+ : root : local
+ : root : local,10.
+ : root : local,10.33.45.34
+ : root : local,10.33.45.34
+ : root : local
+ : root : local,10.
Você pode facilmente catar o conteúdo e canalizá-lo para o perl -pe... .
A análise de expressão regular de Perl é muito parecida com sed, mas mais poderosa.
Explicação:
(?:) : o aumento do conteúdo dos parênteses com ?: torna a não captura grupo . Dessa forma, os parênteses que você usa apenas para agrupamento não afetam as variáveis de referência de referência $1 e $2 que você usa em sua sequência de substituição.
(\s) - Captura o espaço em branco a ser usado como $ 1 na string de substituição. Você deseja corresponder um endereço IP 192 precedido por espaços em branco para que você possa reconhecê-lo como o início da lista e manter a vírgula que o segue. Você ainda quer manter o espaço em branco.
192.*? - correspondência não voraz. Corresponde à vírgula NEXT. O comportamento padrão em Perl (e o comportamento ONLY em sed) é corresponder à vírgula LAST. Não é isso que você quer, e você veria uma diferença nas listas com mais de três endereços IP.
(?:,|$) - Grupo que não captura informando a correspondência não desejada para terminar na primeira vírgula ou no final da linha.
| - Obviamente, alterna para a próxima regex para corresponder.
,?192.*? - Correspondência não-gulosa para 192 que NÃO aparece no início de uma lista.
(,|$) - Assim como antes, combine a primeira vírgula após o endereço IP 192. Neste caso, você quer capturar a vírgula. Você quer mantê-lo desde que você se livrou da vírgula anterior com ,?192.*? e pode haver outro item na lista seguinte. É claro que, se NÃO houver outro item na lista após você, você corresponderá ao% de fim de linha$. Referenciar $ as $2 na string de substituição simplesmente não fará nada; referenciando , irá prepará-lo para o próximo item da lista. Então você está coberto de qualquer maneira.
Espero que isso faça algum sentido!