Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using sed to convert text file to a C string

Tags:

c++

c

sed

I would like to use sed to replace newlines, tabs, quotes and backslashes in a text file to use it as char constant in C, but I'm lost at the start. It would be nice to maintain the newlines also in the output, adding a '\n', then a double quote to close the text line, a crlf, and another double quote to reopen the line, for example:

line1

line2

would become

"line1\n"

"line2\n"

Can anybody at least point me in the right direction? Thanks

like image 877
Alex Darsonik Avatar asked Mar 31 '11 12:03

Alex Darsonik


2 Answers

Try this as a sed command file:

s/\\/\\\\/g
s/"/\\"/g
s/  /\\t/g
s/^/"/
s/$/\\n"/

NB: there's an embedded tab in the third line, if using vi insert by pressing ^v <tab>

  1. s/\\/\\\\/g - escape back slashes
  2. s/"/\\"/g - escape quotes
  3. s/ /\\t/g - convert tabs
  4. s/^/"/ - prepend quote
  5. s/$/\\n"/ - append \n and quote
like image 179
Alnitak Avatar answered Sep 28 '22 06:09

Alnitak


Better still:

'"'`printf %s "$your_text" | sed -n -e 'H;$!b' -e 'x;s/\\/\\\\/g;s/"/\\"/g;s/    /\\t/g;s/^\n//;s/\n/\\n" \n "/g;p'`'"'

Unlike the one above, this handles newlines correctly as well. I'd just about call it a one-liner.

like image 26
Nicholas Wilson Avatar answered Sep 28 '22 07:09

Nicholas Wilson