Você pode usar um sed para primeiro remover o padrão que contém ent e, em seguida, colocar o espaçamento fora e substituí-lo por , como
sed 's/ent[0-9][0-9]: //g; s/ /,/g'
Eu gostaria de enviar a saída para sed e remover os nomes dos adaptadores abaixo usando sed e agrupar os valores com vírgulas
ent13: 16 3979 ent12: 211 411 3978 ent11: 15 3977 ent10: 111 178 179 311 511 1719 3976
Substitua os espaços por vírgulas, remova as palavras antes dos dois pontos, remova o espaço inicial, remova as vírgulas antes dos espaços:
sed 's/ /,/g; s/[^,]*:,/ /g;s/^ //;s/, / /g'
Saída:
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
Usando o GNU awk ou mawk (para suportar expressões regulares em RS ):
$ mawk -v RS='ent[0-9][0-9]: ' -v ORS=' ' -v FS=' ' -v OFS=',' '
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
Ou, de forma equivalente,
$ mawk 'BEGIN { RS="ent[0-9][0-9]: "; ORS=FS=" "; OFS="," }
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
Isso trata a única linha como um conjunto de registros separados por entNN: (onde N é algum dígito). Cada registro é lido como um conjunto de campos delimitados por espaço.
O teste $1 != "" pula o primeiro registro vazio (não há nada antes do primeiro separador de registro) e o bloco correspondente reformata o registro para saída simplesmente fazendo $1=$1 . Isso fará com que awk o reformate usando os valores ORS e OFS fornecidos.
"Agrupar os valores com vírgulas" significa "separar os números de cada adaptador com uma vírgula de outros adaptadores"? Então, tente
sed 's/ *ent[0-9][0-9]: /, /g; s/^, //g' file
16 3979, 211 411 3978, 15 3977, 111 178 179 311 511 1719 3976
Tags text-processing sed