2011-08-08 31 views
5

我在Windows上使用sed刪除了一些unix樣式格式的多餘行(\ n行結尾)。不幸的是,sed替換了這些行結尾,即使它不會更改爲\ r \ n。我該如何阻止sed這樣做?從 r更改 r到 r n阻止Windows sed

我的sed是一個簡單的sed換窗戶,獨立-EXE:

C:\dev>sed --version 
super-sed version 3.59 
based on GNU sed version 3.02.80 

回答

3

我不知道你怎麼能做到這一點與Windows上的sed,但你嘗試過:

unix2dos you_file 
sed ... 
dos2unix you_file 
+0

我知道unix2dos ...我只是不想通過SED首先處理我的文件,然後使用unix2dos解析。我想告訴sed使用\ n作爲換行符而不是\ r \ n,儘管我正在使用Windows機器。 – mort

2

對不起,sed似乎並不像你想的那樣工作,即sed!= awk(可配置)。

我下載了ssed executable,並且幫助輸出沒有提及此選項,因爲我確定您知道。

您可以嘗試修改source code或聯繫作者。

在源代碼中讀通的消息文件,我發現

* The s/// command now understands the following escape (in both halves): 
\a an "alert" (BEL) 
\f a form-feed 
\n a newline 
\r a carriage-return 
\t a horizontal tab 
\v a vertical tab 
\oNNN a character with the octal value NNN 
\dNNN a character with the decimal value NNN 
\xNN a character with the hexadecimal value NN 

您是否嘗試過`S/\ r //」作爲腳本中的最後一個命令?

我在大多數文本文件中做了一個快速掃描,但沒有發現任何讓我相信有一個cmd行選項,可以給你所需要的東西。

正如你不想用unix2dos,作爲sheerest樂觀的行爲,我提供使用TR要清洗那些討厭的「\ r的

sed -i -f yourSedScript yourFile 
mv yourFile yourFile.wrk 
tr -d '\015' yourFile.wrk > yourFile 

最後的選擇,因爲它看來,如果你在windows上編輯Unix文件,你必須通過'ftp'或類似的方式傳輸文件,以使你的Unix轉到Windows,爲什麼不依靠ftp選項來轉換行結尾?

我希望這會有所幫助。

+0

我沒有傳輸文件。我正在編輯C++ Builder特定文件(.dfm),雖然我正在使用Windows機器,但它們具有Unix樣式的換行符。 's/\ r //'不起作用,因爲sed會再次在每行的末尾附加\ r \ n – mort

7

GNU sed(http://gnuwin32.sourceforge.net/packages/sed.htm)具有「二進制模式」的-b選項,即i。即不能用\ r \ n替換\ n。

如果您使用cygwin附帶的sed,那麼即使沒有-b選項,它通常也會使用二進制模式。即,cygwin命令使用輸入文件路徑來決定它們是否應以文本或二進制模式運行,即輸出\ r \ n或\ n:http://www.cygwin.com/cygwin-ug-net/using-textbinary.html。 正如文檔所述,二進制模式是MS-DOS路徑名的默認值,根據我的經驗,默認掛載的文件系統也以二進制模式掛載。

1

如果添加參數-b,則將該文件視爲二進制文件,並且它不會更改行結束符。 手動狀態:

-b, --binary 

      open files in binary mode (CR+LFs are not processed specially)