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]"

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

12
Convenido. tres la herramienta más fácil y probablemente la más rápida para el trabajo.
sdkks
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.