2011-10-13 36 views
17

Sto riscontrando qualche problema nel tentativo di trovare/sostituire alcuni caratteri esadecimali. Voglio sostituire tutte le istanze all'interno di un file della seguente stringa esadecimale:Sostituzione stringa esadecimale con sed

0x0D4D5348 

con la seguente stringa esadecimale:

0x0D0A4D5348 

Come posso fare questo?

MODIFICA: Sto provando a fare un hex find/replace. Il file di input non ha il valore letterale di "0x0D4D5348" al suo interno, ma ha la rappresentazione ASCII di quello in esso.

risposta

26

GNU v3.02.80 sed, v1.03 GNU sed, e HHsed v1.5 da Howard Helman tutte supportano la notazione \xNN, dove "NN" sono due numeri esadecimali validi, 00-FF.

Ecco come sostituire una sequenza HEX nel file binario:

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

Come @sputnik sottolineato, è possibile utilizzare la funzionalità di in place sed. Un avvertimento, però, se lo si utilizza su OS/X, dovreste aggiungere un insieme vuoto di citazioni:

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

Come sed in place su OS/X takes a parameter per indicare quale estensione per aggiungere al nome del file quando si effettua un backup, poiché lo fa crea prima un file temporaneo. Ma poi .. OS/X's seddoesn't support\x.

+0

Apprezzo la risposta completa, ma credo che non era del tutto chiaro. Voglio sostanzialmente sostituire le terminazioni di linea 0x0D con 0x0D0A, tuttavia voglio solo sostituire le terminazioni di riga dove l'inizio della riga successiva contiene i caratteri "MSH" (che è 0x4D5348 in hex). Ha più senso? – Carter

+0

È meglio modificare il messaggio originale piuttosto che aspettare che altri lettori leggano tutti i commenti, cercando di trovare le specifiche riviste. In bocca al lupo! – shellter

+0

Grazie per il suggerimento. Domanda riveduta. – Carter

2

Questo ha funzionato per me su Linux e OSX.

Sostituzione sul posto:

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

(vedere @ commento di Ernest nella risposta da @tolitius)

+1

antico è un termine relativo ... questo mi ha aiutato a ringraziarti. – ojblass