2011-11-02 49 views
4

在Windows/DOS版本的GNU sed中使用什麼字符來終止一行是有點混淆的。特別是,在N命令之後,換行符(\ r \ n vs \ n)用於連接2行的字符是什麼?GNU sed在Windows和行結束符中

我想要的是創建一個腳本,它結合使用行連續字符\語法的C++源代碼行。

例如

int a=10; 

很顯然,我應該使用類似「N」命令,然後在「S」命令,在模式空間看起來替代任何東西:

int \ 
a=\ 
10; 

應該由我的劇本被合併到這個如\,後跟一個空字符串的換行符。但是在Windows中,這個換行符char \ r \ n或\ n在一個「N」命令之後?

我應該用\\\ r \ n還是\\\ n來搜索帶連續線模式的線?

回答

0

我並不完全確定sed的Windows/DOS版本,但是如果它與this question中的版本相似,它會奇蹟般地將\r\n轉換爲\n進行處理。就像在鏈接的問題,你可能需要一個額外的s/$/\r/\r回去。我在Cygwin的測試

sed -e :a -e '/\\$/N; s/\\\n//; ta; s/$/\r/' 

,它似乎工作。

0

我應該使用\\ r \ n還是\\ n來搜索帶連續線樣式的線?

爲什麼不能同時使用?即sed

s/\r\?\n//g 

將匹配兩者\r\n\n。如果您使用ERE,則可能不需要轉義?

0

在Windows上使用GNU sed時,您不必擔心\ r \ n vs \ n。該程序以「文本」模式打開文件,該文件將\ r \ n視爲Unix系統上的\ n字符。

的「-b」或「--binary」選項可以在Windows機器上使用時,要關閉模式,和治療\ R作爲非結束行的文字,例如在一行的「中間」搜索'\ r'(即以'\ n'結尾)

+0

當使用'N'命令時,用於連接兩行的是什麼? – JavaMan

相關問題