Reputation: 587
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
Upvotes: 6
Views: 1776
Reputation: 9685
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.
Upvotes: 1
Reputation: 1213
In Perl, file input from stdin, out to stdout. Hexifies, so no worries about escaping stuff. Doesn't remove tabs, etc. Output is a static C string.
use strict;
use warnings;
my @c = <STDIN>;
print "static char* c_str = {\n";
foreach (@c) {
my @s = split('');
print qq(\t");
printf("\\x%02x", ord($_)) foreach @s;
print qq("\n);
}
print "};\n";
Upvotes: -1
Reputation: 339816
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>
s/\\/\\\\/g
- escape back slashess/"/\\"/g
- escape quotess/ /\\t/g
- convert tabss/^/"/
- prepend quotes/$/\\n"/
- append \n and quoteUpvotes: 10