Reemplazar [0-9] con [AJ] no funciona con sed

11

Estoy trabajando en un comando que reemplaza todos los dígitos 0-9 con sus letras correspondientes en sed. Sé que estoy haciendo algo mal, pero sed no está interpretando la expresión regular de reemplazo como algo más que un literal de cadena.

El comando que estoy usando es sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

Me parece bastante sencillo, pero he estado atrapado en eso durante aproximadamente una hora. La salida que recibo simplemente reemplaza 0-9 con la cadena "[AJ]"

Matthew Snell
fuente

Respuestas:

38

En sustitución, solo la coincidencia (lado izquierdo) es una expresión regular. El reemplazo es más o menos solo una cadena literal (con algo de expansión de barra invertida), no es una expresión regular .

Desea transliteración, no sustitución, así que reemplace scon y:

echo 34031445 | sed 'y/0123456789/ABCDEFGHIJ/'

sed no puede usar rangos y, pero Perl puede:

echo 34031445 | perl -pe 'y/0-9/A-J/'

O simplemente use tr:

echo 34031445 | tr 0-9 A-J
choroba
fuente
12
Convenido. tres la herramienta más fácil y probablemente la más rápida para el trabajo.
sdkks