在字段中间(不是行尾)有一些带有不正确放置换行符的分隔文件,在 Vim 中显示为 ^M。它们源自 MSSQL 数据库的 freebcp(在 Centos 6 上)导出。以十六进制转储数据显示 \r\n 模式:
$ xxd test.txt | grep 0d0a
0000190: 3932 3139 322d 3239 3836 0d0a 0d0a 7c43
我可以用 awk 删除它们,但不能用 sed 做同样的事情。
这适用于 awk,完全删除换行符:
awk 'gsub(/\r/,""){printf $0;next}{print}'
但这在 sed 中没有,而是保留了换行符:
sed -i 's/\r//g'
这似乎没有效果:
sed -i 's/\r\n//g'
在 sed 表达式 (ctrl+v, ctrl+m) 中使用 ^M 似乎也不起作用。
对于这类任务,sed 更容易理解,但我正在努力学习更多关于这两者的知识。我使用 sed 是否不当,还是有限制?