2011-03-31 97 views
6

我想使用sed來替換文本文件中的換行符,製表符,引號和反斜槓,以便在C中使用它作爲char常量,但我在開始時丟失了。如果在輸出中還保留換行符,添加'\ n',然後用雙引號關閉文本行(crlf),並重新打開該行的另一個雙引號,例如:使用sed將文本文件轉換爲C字符串

line1

2號線

將成爲

「一號線\ n」

「2號線\ n」

任何人能至少指向我在正確的方向? 感謝

回答

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和報價
+0

您的解決方案好得多。 – 2011-03-31 12:51:20

+0

太神奇了,謝謝! – 2011-03-31 12:58:20

+1

(3)應該使用\ t而不是嵌入式標籤(更容易複製/粘貼)。 (4)和(5)最終應該有/ g,否則它們將不適用於所有線路。最後,我會添加(6)s/\ r // g去除Windows回車符(這會搞砸了)。它按照我對這些更改的要求工作。 – 2013-07-22 11:27:18

-1

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

與上面的一個,該處理換行符正確也是如此。我只是把它稱爲單線。