unix sed – Utilice sed con referencias posteriores

Pregunta:

Estoy tratando de eliminar un espacio entre 2 cadenas, son así:

312.2 MB
123.34 KB
487.1 GB

Quiero cambiarlos a:

312.2MB
123.34KB
487.1GB

Lo he intentado y puedo conseguir:

echo "312.2 MB" | sed s/[0-9][[:space:]][GMK]//g
312.B

Pero cuando trato de hacer referencias inversas con sed :

echo "312.2 MB" | sed s/\([0-9]\)[[:space:]]\([GMK]\)/\1/g
312.2 MB

Supongo que solo hay una coincidencia, y luego la referencia posterior es la coincidencia completa, pero:

echo "312.2 MB" | sed s/\([0-9]\)[[:space:]]\([GMK]\)/TRY/g
312.2 MB

Entonces, ya no funciona cuando uso el () para capturar los personajes

Probablemente la expresión regular no sea del todo correcta, pero no sé por qué.

Respuesta:

El problema es citar.

Debido a que no cita su comando sed , el paréntesis \(...\) fue interpretado por el shell antes de pasar a sed .

Así que sed trató como paréntesis literal en lugar de paréntesis de escape, sin referencia inversa afectada.

Necesitas:

echo "312.2 MB" | sed 's/\([0-9]\)[[:space:]]\([GMK]\)/\1\2/g'

para hacer que la referencia inversa se vea afectada y obtener lo que desea.

O más simplemente:

echo "312.2 MB" | sed 's/ //'

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım