A resposta curta é que isso deve fazer o que você quer:
sed 's/[][*]\|[[:space:]]//g'
Teste assim:
echo '[*] 111, 22, 33, 44' | sed 's/[][*]\|[[:space:]]//g'
Saída:
111,22,33,44
Uma explicação mais longa segue.
O ingrediente-chave que sua expressão estava faltando foi o uso de g
comando para realizar a substituição global. Sem esse comando, apenas a primeira correspondência em cada linha será substituída.
A parte mais contraintuitiva (na minha opinião) da minha solução é como incluir os colchetes dentro de uma classe de caractere. Para isso, nos referimos ao manual de segurança :
‘]’ ends the bracket expression if it’s not the first list item. So, if you want to make the ‘]’ character a list item, you must put it first.
Para uma discussão mais aprofundada sobre esse tópico, consulte a seguinte postagem sobre SeverFault:
Como alternativa, você poderia ter usado sua expressão e canalizado para outro comando sed
, por exemplo:
echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'