我在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
我在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
我不知道你怎麼能做到這一點與Windows上的sed,但你嘗試過:
unix2dos you_file
sed ...
dos2unix you_file
對不起,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選項來轉換行結尾?
我希望這會有所幫助。
我沒有傳輸文件。我正在編輯C++ Builder特定文件(.dfm),雖然我正在使用Windows機器,但它們具有Unix樣式的換行符。 's/\ r //'不起作用,因爲sed會再次在每行的末尾附加\ r \ n – mort
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路徑名的默認值,根據我的經驗,默認掛載的文件系統也以二進制模式掛載。
如果添加參數-b,則將該文件視爲二進制文件,並且它不會更改行結束符。 手動狀態:
-b, --binary
open files in binary mode (CR+LFs are not processed specially)
我知道unix2dos ...我只是不想通過SED首先處理我的文件,然後使用unix2dos解析。我想告訴sed使用\ n作爲換行符而不是\ r \ n,儘管我正在使用Windows機器。 – mort