Para tratar uma vírgula como um separador de palavras, tente:
IFS="$IFS," read a b c d
Isso adiciona temporariamente uma vírgula a IFS , que é a lista de caracteres que o shell usa para separadores de campo.
Como exemplo, vamos reunir alguma entrada:
$ IFS="$IFS," read a b c d
1, 2,3 , 4
Vamos ver como o bash interpretou essa entrada:
$ echo "a=$a b=$b c=$c d=$d"
a=1 b=2 c=3 d=4
Melhoria
Podemos combinar o prompt e o comando de leitura:
IFS="$IFS," read -p "Enter network info: " a b c d
Documentação
De man bash :
IFS
The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is<space><tab><newline>
Alternativa
Se, por alguma razão não especificada, alguém realmente quisesse usar sed para essa tarefa:
read -p "Enter network info: " a b c d < <(sed 's/,/ /g; q')
O comando s/,/ /g informa ao sed para substituir cada vírgula por um espaço. q diz para sair depois da primeira linha.
O lone < indica redirecionamento : ele diz ao shell para obter sua entrada para o comando read do objeto tipo arquivo que segue na linha de comando.
A construção <(...) é chamada de substituição de processo e cria um objeto semelhante a um arquivo a partir do comando contido nos parênteses. Esse comando é o comando sed que substitui vírgulas por espaços.
Para a mesma abordagem, mas usando o awk:
read -p "Enter network info: " a b c d < <(awk '{gsub(/,/, " "); print; exit}')