我想使用sed來替換文本文件中的換行符,製表符,引號和反斜槓,以便在C中使用它作爲char常量,但我在開始時丟失了。如果在輸出中還保留換行符,添加'\ n',然後用雙引號關閉文本行(crlf),並重新打開該行的另一個雙引號,例如:使用sed將文本文件轉換爲C字符串
line1
2號線
將成爲
「一號線\ n」
「2號線\ n」
任何人能至少指向我在正確的方向? 感謝
我想使用sed來替換文本文件中的換行符,製表符,引號和反斜槓,以便在C中使用它作爲char常量,但我在開始時丟失了。如果在輸出中還保留換行符,添加'\ n',然後用雙引號關閉文本行(crlf),並重新打開該行的另一個雙引號,例如:使用sed將文本文件轉換爲C字符串
line1
2號線
將成爲
「一號線\ n」
「2號線\ n」
任何人能至少指向我在正確的方向? 感謝
嘗試以此爲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和報價在Perl語言,從標準輸入文件輸入,出到標準輸出。 Hexify,所以不用擔心逃脫的東西。不刪除標籤等輸出是一個靜態的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";
更妙的是:
'"'`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'`'"'
與上面的一個,該處理換行符正確也是如此。我只是把它稱爲單線。
您的解決方案好得多。 – 2011-03-31 12:51:20
太神奇了,謝謝! – 2011-03-31 12:58:20
(3)應該使用\ t而不是嵌入式標籤(更容易複製/粘貼)。 (4)和(5)最終應該有/ g,否則它們將不適用於所有線路。最後,我會添加(6)s/\ r // g去除Windows回車符(這會搞砸了)。它按照我對這些更改的要求工作。 – 2013-07-22 11:27:18