2011-10-13 16 views
17

Tengo problemas para hacer que sed encuentre/reemplace algunos caracteres hexadecimales. Quiero reemplazar todas las instancias dentro de un archivo de la siguiente cadena hexadecimal:Sustitución de cadenas hexagonales con sed

0x0D4D5348 

con la siguiente cadena hexadecimal:

0x0D0A4D5348 

¿Cómo puedo hacer eso?

EDITAR: Estoy tratando de hacer un hex encontrar/reemplazar. El archivo de entrada no tiene el valor literal de "0x0D4D5348" en él, pero sí tiene la representación ASCII de eso.

Respuesta

26

GNU v3.02.80 sed, sed de GNU v1.03, v1.5 y HHsed por Howard Helman todos apoyan la notación \xNN, donde "NN" son dos números hexadecimales válidos, 00-FF.

Aquí es cómo reemplazar una secuencia HEX en su archivo binario:

$ sed 's/\x0D\x4D\x53\x48/\x0D\x0A\x4D\x53\x48/g' file > temp; rm file; mv temp file 

Como @sputnik señaló, puede utilizar la funcionalidad de in place sed. Una advertencia sin embargo, si lo usa en OS/X, habría que añadir un conjunto vacío de cotizaciones:

$ sed '' 's/\x0D\x4D\x53\x48/\x0D\x0A\x4D\x53\x48/g' file 

Como sed in place en OS/X takes a parameter para indicar qué extensión para añadir al nombre del archivo al realizar una copia de seguridad, dado que hace, cree primero un archivo temporal. Pero entonces ... OS/X seddoesn't support\x.

+0

aprecio la respuesta a fondo, pero supongo que no estaba muy claro. Quiero básicamente reemplazar las terminaciones de línea 0x0D con 0x0D0A, sin embargo, solo quiero reemplazar las terminaciones de línea donde el comienzo de la siguiente línea contiene los caracteres "MSH" (que es 0x4D5348 en hexadecimal). ¿Eso tiene más sentido? – Carter

+0

Es mejor editar su mensaje original que esperar que otros lectores lean todos los comentarios, buscando encontrar su especificación revisada. ¡Buena suerte! – shellter

+0

Gracias por la sugerencia. Pregunta revisada. – Carter

2

Esto funcionó para mí en Linux y OSX.

Sustitución en el lugar:

sed -i '.bk' 's'/`printf "\x03"`'/foo/g' index.html 

(Véase el comentario de Ernest @ en la respuesta por @tolitius)

+1

ancient es un término relativo ... esto me ayudó gracias. – ojblass

Cuestiones relacionadas