sed elimina caracteres especiales y espacios en línea

sed elimina caracteres especiales y espacios en línea

Aporte

[*] 111, 22, 33, 44

Producción

111,22,33,44

Usando sedel comando sed 's/^\[\*\][[:space:]]*//' filepudimos mostrar la salida, lo 111, 22, 33, 44que significa que todavía hay espacio.

Entonces ¿cuál es el comando correcto sed?

Respuesta1

La respuesta corta es que esto debería hacer lo que quieres:

sed 's/[][*]\|[[:space:]]//g'

Pruébelo así:

echo '[*] 111, 22, 33, 44' | sed 's/[][*]\|[[:space:]]//g'

Producción:

111,22,33,44

Sigue una explicación más larga.


El ingrediente clave que le faltaba a tu expresión era el uso deEl gcomandopara realizar la sustitución global. Sin este comando, solo se reemplazará la primera coincidencia de cada línea.

La parte más contraria a la intuición (en mi opinión) de mi solución es cómo incluir los corchetes dentro de una clase de caracteres. Para ello nos referimos a lamanual de sed:

‘]’
    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 obtener más información sobre ese tema, consulte la siguiente publicación sobre SeverFault:

Alternativamente, podría haber tomado su expresión y canalizarla a otro sedcomando, por ejemplo:

echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'

información relacionada