我正在 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
不认识该\r
符号,请尝试其他。像十六进制\x0D
或八进制\015
。