Sed
sed 無意中更改了 Windows 行尾。我怎樣才能避免這種情況?
我正在 linux 中開發一個可移植的應用程序,我想從一些源文件中刪除尾隨空格,這些文件具有 windows 樣式的行結尾。行尾不應更改為 unix。
使用“sed”的程式碼很簡單,可以在網上找到:
sed -i.bak -E 's/[[:space:]]+$//' myfile
問題是在操作之後,
diff
文件中的所有行(以及生成的 .bak)都不同。這當然不可能。特定文件只有 1 行帶有尾隨空格。使用 hexdump(我使用過
od -x myfile
)實用程序進行檢查,很明顯原始文件的第一行以 “0d0a” 結尾,而在 sed 編輯的文件中,它以 “0a” 結尾。我無法找到有關如何在不影響行尾的情況下執行尾隨空格刪除的任何資訊。有辦法嗎?
如果“輸入”字元是“
$$ [:space: $$]" 正則表達式組,那麼也許這個
sed -i.bak -E 's/[ \t]+$//' myfile
應該管用。但它沒有 - 它創建一個相同的文件。我也嘗試過“-e”標誌,甚至根本沒有標誌。生成的文件仍然與原始文件相同,並且沒有刪除尾隨空格。
是的,(\r = ^M = 0x0D) 字元屬於
space
“字元類”。在您的第二個正則表達式中允許它使用萬用字元:sed -i.bak -E 's/[ \t]+.$/\r/' myfile
或特定的字元,例如
sed -i.bak -E 's/[ \t]+\r$/\r/' myfile
如果您
sed
不認識該\r
符號,請嘗試其他。像十六進製\x0D
或八進制\015
。