使用sed将文本文件转换为C字符串

时间:2011-03-31 12:34:44

标签: c++ c sed

我想使用sed替换文本文件中的换行符,制表符,引号和反斜杠,以便在C中将其用作char常量,但我在开始时就丢失了。在输出中维护换行符会很好,添加一个'\ n',然后是双引号来关闭文本行,一个crlf,另一个双引号来重新打开该行,例如:

1行

LINE2

会变成

“LINE1 \ n” 个

“LINE2 \ n” 个

至少有人能指出我正确的方向吗? 感谢

3 个答案:

答案 0 :(得分:10)

尝试将其作为sed命令文件:

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

注意:如果按vi

使用^v <tab>插入,则第三行会有一个嵌入式标签
  1. s/\\/\\\\/g - 逃避反斜杠
  2. s/"/\\"/g - 逃避报价
  3. s/ /\\t/g - 转换标签
  4. s/^/"/ - 前缀引用
  5. s/$/\\n"/ - 追加\ n和引用

答案 1 :(得分:1)

更好的是:

'"'`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'`'"'

与上面的不同,它也正确处理换行符。我只是称之为单行。

答案 2 :(得分:-1)

在Perl中,从stdin输出文件,输出到stdout。 Hexifies,所以不用担心逃避的东西。不删除制表符等。输出是静态C字符串。

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";