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

6
我想使用sed命令替换文本文件中的换行符、制表符、引号和反斜杠,以便在C语言中将其用作char常量,但我不知道从何开始。最好能在输出中保留换行符,添加'\n',然后是双引号来关闭文本行,接着是回车换行符,再加上另一个双引号来重新打开行,例如: line1 line2
将变成
"line1\n" "line2\n"
有没有人至少可以指点我正确的方向? 谢谢
3个回答

10

尝试将以下内容作为sed命令文件:

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

NB: 第三行有一个嵌入的制表符,如果使用 vi 插入,请按 ^v <tab>

  1. s/\\/\\\\/g - 转义反斜杠
  2. s/"/\\"/g - 转义引号
  3. s/ /\\t/g - 转换制表符
  4. s/^/"/ - 前置引号
  5. s/$/\\n"/ - 追加 \n 和引号

你的解决方案好多了。 - Konrad Rudolph
1
(3) 应该使用 \t 而不是嵌入式制表符(更易于复制/粘贴)。(4) 和(5) 最好在末尾加上 /g,否则它们将无法应用于所有行。最后,我会添加 (6) s/\r//g 来删除 Windows 回车符(这会使事情变得混乱)。对我来说,这些更改可以按照要求工作。 - Adam Bowen
1
这篇文章中,这个答案被转换成了一行代码,对我非常有用:sed -e 's/\\/\\\\/g;s/"/\\"/g;s/ /\\t/g;s/^/"/;s/$/\\n"/' $@ - mpontillo

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

与上面的不同,这个也正确处理换行符。我几乎可以称它为一行代码。

-1
在Perl中,从标准输入读取文件,输出到标准输出。十六进制编码,所以不用担心转义问题。不会删除制表符等。输出是一个静态的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";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接