我想使用sed替换文本文件中的换行符,制表符,引号和反斜杠,以便在C中将其用作char常量,但我在开始时就丢失了。在输出中维护换行符会很好,添加一个'\ n',然后是双引号来关闭文本行,一个crlf,另一个双引号来重新打开该行,例如:
1行
LINE2
会变成
“LINE1 \ n” 个
“LINE2 \ n” 个
至少有人能指出我正确的方向吗? 感谢
答案 0 :(得分:10)
尝试将其作为sed
命令文件:
s/\\/\\\\/g
s/"/\\"/g
s/ /\\t/g
s/^/"/
s/$/\\n"/
注意:如果按vi
^v <tab>
插入,则第三行会有一个嵌入式标签
s/\\/\\\\/g
- 逃避反斜杠s/"/\\"/g
- 逃避报价s/ /\\t/g
- 转换标签s/^/"/
- 前缀引用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";