We have files with some chars represented by decimal(!) ascii values enclosed in cid(#)
as e.g. (cid:104)
for h
. The string hello
is thus represented as (cid:104)(cid:101)(cid:108)(cid:108)(cid:111)
.
How can I substitute this with the corresponding ascii characters using sed?
Here is an example file:
$ cat input.txt
first line
pre (cid:104)(cid:101)(cid:108)(cid:108)(cid:111) post
last line
What I've tried so far is:
$ x="(cid:104)(cid:101)(cid:108)(cid:108)(cid:111)"
$ echo $x | sed 's/(cid:\([^\)]*\))/\1/g'
104101108108111
But wee need the output to be hello
$ cat output.txt
first line
pre hello post
last line
I'm trying to use printf
in sed
. But cannot find out how to pass the backreference \1
to printf
sed 's/(cid:\([^\)]*\))/'`printf "\x$(printf %x \1)"`'/g'