将\n替换为Unix文件中的\ r \n

Joh*_*ant 12 unix cross-platform sed

我试图做这个问题的反面,用Windows行结尾替换Unix行结尾,这样我就可以使用SQL Server bcp over samba来导入文件.我sed安装但没有dos2unix.我试图扭转这些例子但无济于事.

这是我正在使用的命令.

sed -e 's/\n/\r\n/g' myfile
Run Code Online (Sandbox Code Playgroud)

我执行了这个然后跑了od -c myfile,期待看到\r\n以前的位置\n.但是一切都还在\n.(或者至少他们看起来是.od的输出溢出了我的屏幕缓冲区,所以我没有看到文件的开头).

我无法弄清楚我做错了什么.有什么建议?

dla*_*lin 17

面对这个时,我使用一个简单perl的单行:

perl -pi -e 's/\n/\r\n/' filename
Run Code Online (Sandbox Code Playgroud)

因为sed行为各不相同,我知道这很有效.


Jon*_*ler 11

  • dos2unix进入机器有什么问题?
  • 您正在使用的平台是什么?
  • 你有GNU sed或常规的非GNU sed吗?

在Solaris上,/usr/bin/sed需要:

sed 's/$/^M/'
Run Code Online (Sandbox Code Playgroud)

我输入'^ M'的地方controlV controlM.'$'匹配在行尾,并用control-M替换行尾.你也可以编写脚本.

期望sed扩展' \r或' \\r到控制-M的机制充其量只是平台特定的.


mob*_*mob 5

你不需要这个-e选项。

$匹配结束字符。此sed命令将\r在行尾插入一个字符:

sed 's/$/\r/' myfile 
Run Code Online (Sandbox Code Playgroud)